lambdaだけでcar, cdr, cons

SICP読書会関係者のブログをみていると、lambdaだけでcar, cdr, consをつくるみたいな話がでてきたので考えてみた。

(define (mycons x y)
  (lambda (f) (f x y)))

(define (mycar x)
  (x (lambda (a b) a)))

(define (mycdr x)
  (x (lambda (a b) b)))

10分ほど考えた結果。こういうことだろうか。lambda(関数抽象)と関数適用だけでできた。

で、書きおわって「λすげえ!λかわいいよλ」とか思ったけど、これって型無しλ計算のあれじゃねーかということに気がついた。