SICP 2.4
トップレベルでcar, cdrにオリジナルとは別の手続きをdefineしていいんだっけ?R5RSにはこんなことが書いてあるけど、わからん。
プログラムはトップ=レベル定義を使って任意の変数を束縛してよい。そして後からその束縛を代入によって変更してよい(4.1.6 節参照)。これらの演算はScheme の組込み手続きの振舞を改変しない。
(define (_cons x y) (lambda (m) (m x y))) (define (_car z) (z (lambda (p q) p))) (define (_cdr z) (z (lambda (p q) q))) ;(_car (_cons x y)) ; -> (_car ((lambda (m) (m x y)) x y)) ; -> (_car (lambda (m) (m x y)) ; -> ((lambda (m) (m x y)) (lambda (p q) p)) ; -> ((lambda (p q) p)) x y) ; -> x ; test (define p (_cons 1 '(2 3))) (_car p) (_cdr p)