Y Combinator(Yコンビネータ)がHaskellで書けない!?
2010-05-08


ASAHIネット([URL] )のjouwa/salonからホットコーナー([URL] )に転載したものから。
---
[URL]
ユニクロのTwitter使ったこれは頭いいねえ
で、ちょっと書いた飲み会で、弾さん(小飼弾)が、Y Combinator(Yコンビネー
タ)がHaskellで書けないのは、すごい皮肉だと言っていた。OCamlなら書ける
のにと。
 そのときは、「へえ、そうなのか」と「えっ、嘘だろう」の両方が入りミジ
ンコ状態の心境だった。
 ちなみに、私は、OCamlのことを、岡村君と呼んでいます。\(^O^)/
 そんな小ネタはいいから。先に行け。

[URL]
洋書のAI(人工知能)本。「実用Common Lisp」のことも少し。
を書いていたときに、このことを思い出した。
 Haskellは、遅延評価なのに、どうして書けないのかなと思ったわけ。
 Haskellのその辺わかってないし、プログラム書かないから、パーの助状態
なので、ちょっと調べてみた。
 評価の話じゃなくて、型をチェックするとき無限ループになって破綻するの
ね。なるほど。
 でも、HaskellでY Combinator(Yコンビネータ)は、書けるようね。たとえば、
これ。
[URL]
Y Combinator in Haskell
 new typeで、補助的な型を定義してやればいいと。
 でも、GHCは、バグがあって、これでも無限ループになると。Hugsは動くと。
 ま、なんにせよ、これは学術的な練習問題なので、実際には、そこにあるよ
うな関数定義でOKだよと。

 以下の
[Haskell] How to define Y combinator in Haskell
には、もう少し詳しい話がある。
[URL]
[URL]
[URL]

 GHCのinlinerのバグは、たぶん直さないので、NOINLINEというプラグマを使
えばいいと。

 この件に関する、弾さんのブログエントリは、
[URL]
Y combinator is forbidden in Haskell!?
なのかな。2006年か。
 あ、ちゃんと書けるよというトラックバックがついているね。
[URL]
λ. Re: Y combinator is forbidden in Haskell!?

コメント(全2件)
コメントをする


記事を書く
powered by ASAHIネット