問題2.6 (λって結局何なのさ〜)

λ計算のところ。データは全て手続きで記述できますよっと。
いや、正直、問題はわかるんだ。ただ、コレが何なのか人に説明できるところまでいってない。

とりあえず、問題を解くと、

zero, one, twoは、それぞれ、

zero = λs.(λx.x)
one = λs.(λx.sx)
two = λs.(λx.ssx)

となるので、単純に、

(define zero (lambda (s) (lambda (x) x)))
(define one  (lambda (s) (lambda (x) (s x))))
(define two  (lambda (s) (lambda (x) (s (s x)))))

となるだけ。

これは、いいのだけど、結局これが何なのさ〜。と言いたい。

2.1.3節の主題が『データとは何か?』と言うもので、今までは、Value、もしくはValueが組み合わさってできたもの、と言う意味合いしかなかったのが、ここで、cons, car, cdrが手続きとして表現できることを見て、さらに、数値までも手続きで記述できると言うことをλ計算から教わった。

しかし、それ以上の意味を見いだせない。もちろんλ計算チューリングマシンと同等出ることが示されるので、関数だけでプログラムが作れます、と言うのは意味がある。しかしながら、社会としてはやっぱり従来の手続き型の言語で構成されて行くのだろう(一部、関数型を取り込むだろうけど)。その中で我々が、λを勉強する意義って何なのだろうか? 今のところ、知的好奇心以外の意義を見いだせない。

今後、Y-Combinatorとかさらにイミフなモノが出てくるけど、その頃には意義が理解できているだろうか。