みんな大好きラムダ計算。 Scratchで実装してみました。 不良品です。 [文法] ラムダ式: \ <引数名> . <式> 例: \x.x (恒等関数) 引数名が複数ある場合、カリー化されます。 関数適用: <関数> <引数> 例: f x [なぜ不良品か?] 遅延評価がないのでYコンビネータは使えません。 (無限ループします) \func. (\x. func (x x))(\x. func(x x))はNG。 (因みに上の式のfuncをfに変えると 何故か悪い言葉として検出されます) また、実装が変なので、Zコンビネータも使えません. (無限ループします) \f. (\x. f (\y. x x y)) (\x. f (\y. x x y))もNG Wikipediaに載っている不動点コンビネータを 全て試してみましたが、無理でした。 さすがに実装を変えないといけませんね。 それじゃチューリング完全じゃないって? だから不良品なんです。 まあ、アニメーションになってて面白いです。 これとか特に (\L. L L L L L L L L L L L L L L L L L L L L L L L L L L)\a b c d e f g h i j k l m n o p q s t u v w x y z r. (r (t h i s i s a f i x e d p o i n t c o m b i n a t o r))
再描画せずに実行×再帰呼び出し をしていたら、デバッグのたびにフリーズ。 仕方なく安全のために、 「再描画をせずに実行」をやめて、 「〇秒待つ」を沢山入れています。 ところで複雑なプログラミングって、 画面を見ない方が捗りますよね