標高+1m

Don't be rational

Nadekoの文法いじりました。

実験用に去年書いた、遅延評価でカリー化されたS式の言語をちょこっといじりました。

9月25日以前:

(:= (fact n)
    (= n 0
         1
         (* n (fact (- n 1)))))

(show (integers -map (-> (x) (fact x)) -take 5))
;;これはλを見せるための例.ほんとはλで囲わなくても一緒

(integers -map fact -take 5)
;;後置用関数は文法じゃなくてリストが高階関数になっているというだけ

;;普通に前置用の関数もある
(take (map fact integers) 5)

9月26日以降

;;定義は(:= (名前 引数...) 式)から(= 名前 引数... 式)に変更
(= fact n
   (=? n 0
         1
         (* n (fact (- n 1)))))

;;λは(-> (引数...) 式)から(^ 引数... 式)に変更
(show (integers -map (^ x (fact x)) -take 5))
;;あとは一緒

Nadekoだとλが一つの式しか取らないからlastを取ってやればどれが本体か識別できるという気付きにより、λと定義から括弧を一組ずつ減らしました。

λを^にしたのはΛに似ているから、というか歴史的な経緯を遡る感じです。

定義に=を使って比較には=?を割り当てたのは、数学だと関数定義でf(x) = xと使う事はあってもbool演算的なことに=を使うことはないじゃんと気付いたためです。=は文法ですが=?はただの関数です。