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