2008. 4. 3.

연습문제 2.6

힌트대로 one을 (add-1 zero)) 을 이용해서 풀어보면

(lambda (f) (lambda (x) (f ((zero f) x))))


여기서 zero는 인자하나를 받는 lambda식이므로

(lambda (f) (lambda(x) (f ((lambda (x) x) x))))


가 되므로

(lambda (f) (lambda (x) (f x)))


가 된다..

이제 two는 (add-1 one)이므로

(lambda (f) (lambda (x) (f ((one f) x))))


은 위의 식을 풀되 인자를 다른 것으로 변경하면..

one을

(lambda (g) (lambda (a) (g a)))


이라면 two는


(lambda (f) (lambda (x) (f (((lambda (g) (lambda (a) (g a))) f) x))))


이고

((lambda (g) (lambda (a) (g a))) f)




(lambda (a) (f a))


가 되므로 준식은

(lambda (f) (lambda (x) (f ((lambda (a) (f a)) x))))


가 된다.

다시
        
((lambda (a) (f a)) x)




(f x)


이므로 준식은

(lambda (f) (lambda (x) (f (f x))))


이 된다.

따라서 one과 two는

(define one (lambda (f) (lambda (x) (f x)))
(define two (lambda (f) (lambda (x) (f (f x))))


가 된다.

댓글 없음:

댓글 쓰기