Yコンビネータの件

alohakun*1さんホワット・ア・ワンダフル・ワールド 2 つの原理と文化を見て思い出したのでお礼を。


まず前提として僕はYコンビネータを理解していないです。
僕が未だにきちんと勉強できていないλ計算λ計算ってどういう動機で研究されたもので、勉強したらどういう風に楽しそうかってことが分からなくて踏み込めてなかったのですが、以下のまとめがすべて教えてくれました。ありがとうございます。

このように本当に良く分かっている人が、学習後にエッセンスをまとめてくれた情報ってなかなか見つからないのでありがたかったです。(周りに詳しい人がいれば口頭ですぐに教えてもらえるのかもしれないのですが)

lambda やクロージャを使って何ができるかやってみるのも楽しいけれど、 時には、逆に、lambdaやクロージャは何と何を使ってできてるのか、とか、何と何があれば lambdaやクロージャがどのくらいのレベルまで実現できるのか、を考えてみるのも楽しいこともあるかも。 役には立つかどうかは人によるような気がする。

そういう風に「○○は何と何があればできるのか?」を突き詰めてった一つの究極が …… 「ループって再帰で書けるよね」 「名前付き関数っていらないよね。無名関数だけでいい。」 「再帰もYコンビネータがあればいいしね。」 「自然数ってChurch Encodingすればこれも無名関数で書けるよね。」 「booleanとif文も全部関数だけで実現できちゃった。」 …… λ計算

で、もう一つの究極が …… 「要はどんなオブジェクトも文字列化できる言語なら、create_functionみたいなの さえあればクロージャ要らんよね。」「全部文字列でいい。」「クラスオブジェクトとかもJSONとかみたいなので なんか文字列になるよきっと。」「関数も全部"関数本体のソース"っていう文字列で表すことにしちゃえ。」 「つまり文字列操作さえできれば他全部要らない」「文字列操作っつーか、一文字ずつ読んで隣の文字の処理に 移って…みたいな一文字ずつの処理さえあれば実はおk」 …… チューリングマシン


何が言いたかったかというとk.inabaさんありがとうございます。ということで。

追記

自分もこういうまとめが書けるようにならないとなあ。

追記2

A正規形とλ計算の学習順序が逆だとのつっこみが。。

*1:kunは敬称?