> …頭から煙が出そうになったので、サンプルのソースを読もうとしてみました。
サンプルをそのまま追うと多分死にます。
簡略化してから追うと
fp_op2(closure(f) { return closure(x, y) { ... f(a, b) ... }; })
⇒ Z
Z(c, d)
⇒ closure(f) { return closure(x, y) { ... f(a, b) ... }; }(Z)(c, d)
⇒ closure(x, y) { ... Z(a, b) ... }(c, d)
こんな感じです。
参考ページ
http://lecture.ecc.u-tokyo.ac.jp/~kawai/pub/is/isis2-note.html
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/fix.html
# 「不動点演算子」じゃなかなか見付からないですね。orz
# どうやって見付けたんだろう。
==
私も(crowbarを基に)プログラミング言語を作ろうと思っていますが、
そのときは名前付きのクロージャは入れないで、
Schemeの拡張シンタックスのような機能を付けようと思っています。
んで、
named_closure tag (x, y, ...) { ... }
と書けば
closure(tag) {
tag = closure(x, y, ...) { ... };
return tag;
}(null)
と展開されるようなものをプログラマが自分で作れるようにしたいな、と(不動点演算子はどこへ行った)
# で、ライブラリに入れておく