言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Haskell で cons を実装してみる。その2

http://d.hatena.ne.jp/propella/20080202/p2 の続き。自分で考えようと思ったけど、SICP 4.2.3 にあった答え(?)をうっかり見てしまった!新しい解はスマートで、しかも型安全。わざと冗長に書くと、

cons x y m = m x y
getCar x y = x
getCdr x y = y
car z = z getCar
cdr z = z getCdr
*Main> (car (cons 3 4))
3
*Main> (car (cdr (cons 3 (cons 4 ()))))
4
*Main> (cons 3 (cons 4 ())) getCdr getCar
4
*Main>

なんで冗長に書いたか分かりますか?(cons 3 (cons 4 ())) getCdr getCar みたいな事がしたかったんです!まさに Scheme + Smalltalk。さて、この後プリンタと map を書こうと思ったんだけど、またもやムズイ。。。ので休憩。