문제
다음 리스트에서 7을 끄집어 내려면 car과 cdr 연산을 어떻게 엮어 써야 하는지 밝혀라.
(1 3 (5 7) 9)
((7))
(1 (2 (3 (4 (5 (6 7))))))
문제로 부터 얻은 것
list와 cons의 관계에 대한 이해도가 상승했습니다.
문제풀이
문제에서 주어진 리스트를 스킴으로 표현하면 아래와 같습니다.
(define li-1 (list 1 3 (list 5 7) 9))
(define li-2 (list (list 7)))
(define li-3 (list 1 (list 2 (list 3 (list 4 (list 5 (list 6 7)))))))
|
한번에 쉽게 풀 수 있을 줄 알았는데, 생각보다 많이 틀렸습니다. 우선 정답은 아래와 같습니다.
(car (cdr (car (cdr (cdr li-1)))))
(car (car li-2))
(car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr li-3))))))))))))
|
주로 헷갈렷던 포인트는 이렇습니다. 아래의 정리들만 잘 기억해도 헷갈리지 않을 것 같습니다.
(cdr (a b))=b
(cdr (a b))=(b)
(car (cdr (a b)))=b
읽어주셔서 감사합니다.