gh:nna774/lilith

gh:nna774/lilith

C++であえてほぼbetter Cみたいな書き方をして実装してるlispガベコレを書きたいので、あんまり型による恩恵が受けられないようなCみたいなコード書いてる。

glibcだとポインタは常に8byte-alignされてるらしい!
64bitだと16byte-alignされてるらしいから、下4bitも使えた。

https://github.com/nna774/sicp-4syou/blob/master/main.scm を見ながら実装してる……。

lisp界で (cons 1 2) と書いてあったものを eval すると、
funname 'cons とargs (list 1 2) に分かれてそれぞれ eval
前者ではlisp界でconsを表すプロシージャみたいなものになる(後者は明らか)。
(define cons (lambda (x y) (cons x y))) 相当のコードをはじめ書いてたけど、これはもちろんダメ。
lisp界でのconsの定義をここでは書かないといけないのに、何かに移譲している(そしてそれは今欲しいもの)ので。
(define cons (lambda (x y) (lambda (f) (f x y)))) の方向性なら確かに行けそうではある。
でもできればこれは使わずにピュアな(?)consを実装したい。
多分 apply の中でプリミティブかどうかを判定してうまいことやればよい。
Powered by Helpfeel