(define (square-list-iter items)
(define (iter things answer)
(if (null? things)
answer
(iter (cdr things)
(cons (square (car things))
answer))))
(iter items nil))
이 결과는 다음과 같다.
(16 9 4 1)
문제는 cons를 하는 부분에 있다. 가장 마지막에 결과가 cons되므로 역순으로 출력된다. map의 정의를 다시 생각해볼것
(define (square-list-iter2 items)
(define (iter things answer)
(if (null? things)
answer
(iter (cdr things)
(cons answer
(square (car things))))))
(iter items nil))
의 결과는 다음과 같다.
((((() . 1) . 4) . 9) . 16)
역시 cons부분에서 문제를 찾아야한다.
(cdr things)와 cons부분의 변화를 살펴보자면.... (리스트는 (1 2 3 4)였다고 가정...
1) (2 3 4) (cons nil 1) -> ((). 1)
2) (3 4) (cons ((). 1) 4) -> ((() . 1) . 4)
...
식이 됨을 알 수 있다.
정확한 답을 원한다면 cons는 append로 바꾸고 이후에 나오는 square식을 list화 해야한다.
(define (square-list-iter3 items)
(define (iter things answer)
(if (null? things)
answer
(iter (cdr things)
(append answer
(list (square (car things)))))))
(iter items nil))

댓글 없음:
댓글 쓰기