SICP 연습문제 1.42 친절한 풀이
문제
f와 g가 모두 인자 하나를 받는 프로시저라 하자. g와 f의 합성함수는 로 정의한다. 두 프로시저를 합성하는 프로시저 compose를 정의하라. 예를 들어 inc가 인자에 1을 더하는 함수라면 다음 결과가 나온다.
((compose square inc) 6) |
문제로 부터 얻은 것
람다식을 이미 이해했다면 이 문제에 큰 의미를 찾기는 어렵습니다.
문제풀이
문제를 풀는 것은 어렵지 않습니다.
바로 프로시저를 짜보겠습니다.
(define (compose f g) |
혹시나 만약에 다음과 같은 오답을 내놓는 분들도 계실것 같습니다.
(define (compose f g) |
이전 문제인 연습문제 1.41을 제대로 이해했다면 무엇이 문제인지 알 수 있습니다.
(f (g x)) ((f g) x)
예를 들어 square와 inc를 아래와 같은 방법으로 합성한다고 가정합시다.
((square inc) 5)
square의 정의에 의해
(square inc) = (* inc inc)가 됩니다.
(* inc inc)는 당연히 말이 안됩니다. 프로시저끼리 곱연산을 할 수는 없습니다.
inc의 결과값끼리 곱연산을 하는 것인데 가능하지 않느냐?고 생각하실 분도 계실것 같습니다.
f와 g의 합성함수는 프로시저를 반환해야 제대로 작동하는 것입니다.
그런데, (* inc inc)는 프로시저를 반환하는 함수가 아닙니다.
그러므로 위 함수 (f g)는 설계의도에서 벗어난 프로시저입니다.
읽어주셔서 감사합니다.