let 式から λ 抽象へ • let a=b in c を (λa. c) b に • let* a=b, c=d in e を (λa c. e) b d に • apply-at-once: 関数適用を 2 項単位へ • (a b c) を ((a b) c) に • (a) を a に • multiple-params: λ 抽象をカリー化 • (λa b. c) を (λa. (λb. c)) に • 抽象構文木の書き換えなので、 XSLT と非常に相性が 良い • 更に他の拡張を足すことも容易 30
• η 変換 • λx. (λy. (λz. z) y) x や λx y z. x y z 等 • 09-ski-one-plus-two, 10-three-plus-four • SKI コンビネータと Church 数で 3+4 を計算 • let 式と let* 式の脱糖のテストでもある • let* S=(λx y z. x z (y z)), K=(λx y. x), I=(λx. x), B=(S (K S) K), succ=(S B), add=(S I (K succ)), two=(succ I), three=(succ two), four=(two two) in add three four など 42