SICP問題2.18

引数としてリストをとり、同じ要素の逆順のリストを返す手続きreverse

(define (reverse items)
  (define (reverse-iter r-items count)
    (if (> 0 count)
	r-items
	(reverse-iter (append r-items (list (list-ref items count)))
		      (- count 1))))
  (reverse-iter (list) (- (length items) 1)))

append, list-ref を使用しない版

(define (reverse x)
  (define (iter rest result)
    (if (null? rest)
        result
        (iter (cdr rest) (cons (car rest) result))))
  (iter x (list)))