cons car cdr の実装

SICP の問題 2.4 にあるように cons を (define (cons x y) (lambda (m x y))) 、car を (define (car z) (z (lambda (p q) p))) 、cdr も同様にして、リスト処理をラムダ式だけで実装できる...ように思えるが、pair? やら null? やら list? やら atom? やらで困る。list? や atom? はともかく、pair? も null? もないとなるとたいていのリスト処理ができない。というかそもそも nil をどうやって表現するのかと。pair? や null? のための構造も作り込んでやればいいわけだがややこしくなりすぎる
というわけで無理をせずにプリミティブ値を導入することにした(何に?)