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 の中でプリミティブかどうかを判定してうまいことやればよい。