SICP 연습문제 2.24 친절한 풀이
문제
식 (list 1 (list 2 (list 3 4)))를 계산한다고 할 때, 실행기가 계산한 값을 어떻게 찍어내는지, 그 값은 상자와 화살표 구조로 나타내면 어떠한지, 또 (그림 2.6처럼) 나무꼴로 그려 보면 어떠한지 나타내어라.
문제로 부터 얻은 것
list와 cons의 차이를 확실히 알 수 있었습니다.
문제풀이
a. 실행기의 계산값
문제의 요구대로 바로 한번 실행시켜 보겠습니다.
식 (list 1 (list 2 (list 3 4)))는 (1 (2 (3 4)))로 출력됩니다.
b. 상자와 화살표 구조
(1 2 3 4)와 (1 (2 (3 4)))를 상자와 화살표 구조로 나타내면 다음과 같습니다. 흔히 범하는 오류는 (1 (2 (3 4)))를 아래 그림의 첫번째 다이어그램으로 생각하는 것입니다. 괄호 “(”, ")"는 리스트를 나타내는 괄호이지 cons를 나타내는 괄호가 아닙니다. 이 괄호가 cons를 나타내는 괄호였다면, (1 (2 (3 4)))는 아래 그림의 첫번째 다이어그램과 같은 모습이었을 것입니다. 잘 이해가 안되신다면, 책의 2.2.1절의 그림 2.4를 보시면 이해가 쉬울 것입니다.
c. 나무꼴 그림
위의 상자와 화살표 구조를 이해했다면 나무꼴 그림을 그리는 것은 쉬울 것입니다.
d. 앞절의 이해
여기까지 이해하셨다면, 앞의 2.2.2절의 length 부분을 잘 이해할 수 있을 것입니다. 이해의 핵심은 (list a b)(cons a b)라는 것입니다. 이 식을 옳게 고친다면, (list a b)(cons a (cons b nil))입니다.
(define x (cons (list 1 2) (list 3 4))) |
x의 원소는 [(list 1 2), 3, 4]로 총 3개의 원소를 가지므로 길이는 3입니다.
(list x x)의 원소는 [x, x]로 총 2개의 원소를 가지므로 길이는 2입니다.
읽어주셔서 감사합니다.