当ブログのタイトル「( (lambda(a)(a a))(lambda(a)(a a)))」について説明
まずS式について
「1 + 2」を「(+ 1 2)」と表現する書き方があります。
1 + 2 - 3 * 4
は
(- (+ 1 2) (* 3 4))
となります。これがS式です。
高階関数
関数を値として扱います。
自分で関数を定義する時、高校とかだと以下のように書くと思います。
f(x) = 2 * x + 1 関数f(x)は、xに2をかけて、それに1を足します。
練習にf(10)を解きます。
f(10) = 2 * x + 1 = 21
f(x)をちょっと変形します。
f = {x => 2 * x + 1} fは、xを引数にとって、xに2をかけてそれに1を足す関数です。
さらに、「f = {x => 2 * x + 1}」をS式の流儀チックに変形するとこうなります。
lambdaは関数を作るって意味です。
f = (lambda (x) (+ (* 2 x) 1)) (f 10) = (+ (* 2 10) 1) = (+ 20 1) = 21
では「( (lambda(a)(a a))(lambda(a)(a a)))」は?
さて、ようやく本命の「( (lambda(a)(a a))(lambda(a)(a a)))」という式に入ります。
この式は以下のような感じに分解できます。
A = (lambda(a)(a a)) B = (lambda(a)(a a)) (A B)
つまり、こうなります。
A = {a => a(a)} B = {a => a(a)} A(B)
さらに噛み砕くとこうなります。
A(a) = a(a) B(a) = a(a) A(B)
後は、実際に計算してみます。
A(B) = B(B) A(a) = a(a)より、 = B(B(B)) B(a) = a(a)より、 = B(B(B(B))) B(a) = a(a)より、 = B(B(B(B(B)))) B(a) = a(a)より、 = ....
無限に計算が終わらないことがわかります。
つまりこの「( (lambda(a)(a a))(lambda(a)(a a)))」という式は、永遠に答えが出ない式なんです。
答えがないという答え
「幸せとは何か?」とか「人生とは何か?」とかめんどくせーから、答え無しという答えでズルしようぜ、みたいな。
無限に広がる話を、尻すぼみに終わらせてみた。