SICP 연습문제 1.34 친절한 풀이

문제

다음 프로시저를 정의하였다.

(define (f g)
(g 2))

그런 다음 아래와 같이 실험해 보았다.

(f square) #4
(f (lambda (z) (* z (+ z + 1)))) # 6

실행기에 (f f)를 계산하라고 하면 어떤 일이 벌어지는가? 왜 그렇게 될까?

문제로 부터 얻은 것

다른 프로시저에 인자를 넣어주는 프로시저를 볼 수 있었습니다.

문제풀이

바로 실행해 보겠습니다.

오류가 나는 모습

오류가 나는 이유를 알아보기 위해 맛바꿈 계산법으로 전개해 보겠습니다.

(f f)
(f 2)
(2 2)

f는 프로시저를 인자로 받는 프로시저인데 숫자인 2를 인자로 받게 됩니다.
(2 2)를 실행할 수는 없으므로, 에러를 발생시키는 것입니다.





이 문제의 의도는 아마도 아래의 프로시저를 살펴 보는 데에 있다고 생각합니다.

(define (f g)
(g 2))

다른 프로시저에 인자를 넣어주는 프로시저를 볼 수 있었습니다.





읽어주셔서 감사합니다.