nobsun です

> ある数について全ての自然数との積のリストを定義したいのですが
> 再帰を使って表現できなくて困っています。
> 
> 実際のリストは以下のように無限に続くものです。
> 
>   multiples n = n, n+n
>               = n, n+n, n+n+n
>               = n, n+n, n+n+n, n+n+n
>               = ...

このパターンは結構よくあるパターンです。
というわけで、標準の Prelude 関数を探しましょう。

iterate :: (a -> a) -> a -> [a]

というのを使います。

multiples n = iterate (n+) n

自分で関数を定義したら、それが標準 Prelude あるいは 標準ライブラリの
高階関数を使って定義できるかどうかを考えてみるのも楽しいですよ。
かなりの定義が、再帰的な定義を明示的に書く必要はなく、高階関数で済む
と思います。

また、標準 Prelude あるいは 標準ライブラリにはない有用な高階関数を
解こうとしている問題領域で見つけたら、それは素晴しい発見かもしれませんよ。
その問題領域でつかえるライブラリ一式を発見したようなものですから。。。

--
Nobuo Yamashita                 mailto:nobsun / sampou.org
  I love programming.           http://www.sampou.org/
  I love pencil puzzles.        http://www.puzzle.jp/


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/