こんばんは。早川です。

On Sun, 06 Apr 2003 15:40:29 +0900 (JST)
Nobuo Yamashita <nobsun / sampou.org> wrote:
> >   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

なるほどぉ..楽しいです。
でも今の自分では、iterate を見つけても
上のコードは頭に浮かばなかったと思います..
これはもう鍛錬あるのみですね!

それと余談ですが
上のコードの (n+) はクロージャと呼んで間違いないでしょうか?

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

それぞれが何をするのかは何となく理解できてるつもりなのですが
いざ利用してみようと思うと、ピタっと思考が止まってしまいます。
これも慣れなんですよね、きっと..

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

これはオブジェクト指向言語でいうと、ビジネスロジックを
うまいクラス階層で設計できたようなイメージでしょうか?

--
SH
tetryl / tokyoprogrammer.com


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