lisp on yarv製作日誌9
作り始めて一月ぐらいたつのですが、肝心なcarとかcdrなどのリスト処理に関する関数を作っていなかったので、実装しました。
リストはrubyのArrayを利用して表現しています。
例えば、(1 2)は[1, [2, nil]のようになります。listクラスみたいなのを作って
表現するのも考えたのですが、yarvにはArrayに関する命令があるので、たぶんArrayで表現したほうが、効率がいいんじゃないかと思ったのでこうしました。
それから、lambda関数を使ってcar、cdr、consを試しに書いてみました。
(def cons (a b) (-> (f) (lamcall f a b))) (def car (f) (lamcall f (-> (a b) a))) (def cdr (f) (if (== f nil) nil (lamcall f (-> (a b) b))))