Exercise 2.18. Define a procedure reverse that takes a list as argument and returns a list of the same elements in reverse order:
(reverse (list 1 4 9 16 25))
(25 16 9 4 1)
(define (reverse lst)
(cond ((null? lst) lst)
(else
(append (reverse (cdr lst)) (list (car lst))))))
(define (new-reverse lst)
(define (iter l reversed)
(if (null? l)
reversed
(iter (cdr l)
(cons (car l) reversed))))
(iter lst '()))
;;; tests begin
(load "../testframe.scm")
(assertequal? (reverse '(1 2 3 4))
'(4 3 2 1))
(assertequal? (new-reverse '(1 2 3 4))
'(4 3 2 1))
另外一种(歪打正着的)方法能够产生 reverse 效果,参看在 练习 2.22 。