SICP 全笔记

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