gh:nna774/lilith
glibcだとポインタは常に8byte-alignされてるらしい!
64bitだと16byte-alignされてるらしいから、下4bitも使えた。
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
の中でプリミティブかどうかを判定してうまいことやればよい。