SICP 연습문제 2.18 친절한 풀이

문제

리스트를 인자로 받아 그 원소들의 차례를 거꾸로 뒤집는 reverse 프로시저를 정의하라.

문제로 부터 얻은 것

스킴에서 리스트를 어떻게 표현하는 지에 관한 이해도가 상승했습니다.

문제풀이

리스트의 원소를 뒤집는 것은 새로운 리스트를 만들고 꺼내는 순서대로 다시 넣는 것으로 생각할 수 있습니다. 하지만 scheme에서는 다른 언어들 처럼 또다른 배열을 만들어 놓고 append하는 것이 불가능하므로 아래와 같이 result 인자를 이용한 재귀 프로시저로 구현합니다.

(define (reverse x)
(define (reverse-iter x result)
(if (null? x)
result
(reverse-iter (cdr x) (cons (car x) result))))
(reverse-iter x nil))



문제에서 제공한 테스트 코드도 실행시켜 보겠습니다.

(reverse (list 1 4 9 16 25))



예상한 결과를 잘 반환하는 모습



읽어주셔서 감사합니다.