Louis 的两种方法都不对,第一种方法list 的顺序反了,第二种方法最后构造出的是一个表头为空,后面是值的序对。 list 应该表头就是第一个元素。
正确的迭代方法:
(define (square-list items)
(define (iter things answer)
(if (null? things)
(reverse answer) ; change 当最后迭代完以后 list为逆序, 调用reverse 将逆序改为正序即可
(iter (cdr things)
(cons (square (car things))
answer))))
(iter items '()))