lisp on yarv製作日誌5
lambdaを使えるようにしました。
lblock (= add (-> (a b) (+ a b))) end puts add.call(10, 20) #=> 30
lisp側から呼び出す場合は、
def lamcall(lam, *args) lam.call(*args) end
のようなメソッドを定義して、
lblock (= add (-> (a b) (+ a b))) (puts (lamcall add 10 20)) end
(lamcall add 10 20)のように呼び出します。
lamcallはそのうちCで書き直します。
まったく意図していなかったのですが、変数と関数の名前空間が分かれています。
lblock (def x () (puts x)) (= x 100) (x) end # => 100