SICP 연습문제 2.4 친절한 풀이

문제

아래는 프로시저가 쌍을 표현하는 다른 방법이다. 이런 표현 방법으로, 어떤 물체 x와 y가 있을 때 (car (cons x y))한 값이 x임을 밝혀 보라.

(define (cons x y)
(lambda (m) (m x y)))

(define (car z)
(z (lambda (p q) p)))

여기서 cdr를 어떻게 정의할 수 있는가? (귀띔: 이렇게 정의한 쌍이 올바로 돌아간다는 것을 따져보기 위해서, 1.1.5절의 맞바꿈 계산법을 써 보라.)

문제로 부터 얻은 것

람다식을 연습할 수 있습니다.
cons를 프로시저로 새로 구현하던, 기존의 내장된 cons를 사용하던 사용자는 신경쓸 필요가 없다는 것을 알았습니다.

문제풀이

람다식의 활용이 익숙하지 않은 분들은 이번 문제를 활용해서 이해도를 높일 수 있을 것 같습니다.

맞바꿈 계산법을 이용해서 (car (cons x y))를 정의해 보겠습니다.

(car (cons x y))
(car (lambda (m) (m x y)))

(car (lambda (m) (m x y)))
((lambda (m) (m x y)) (lambda (p q) p))

((lambda (m) (m x y)) (lambda (p q) p))
((lambda (p q) p) x y)

(car (cons x y)) = x



cdr을 정의하는 것은 매우 쉽습니다.

(define (cdr z)
(z (lambda (p q) q)))

읽어주셔서 감사합니다.