リスト操作はそもそも再帰的な操作が多いので、
;;; (nth n x) は x の n 番目の要素を返す (define (nth n x) (if (= n 0) ;;; n が 0 なら、リストの先頭を返し (car x) (nth (- n 1) (cdr x)))) ;;; でなきゃ、残りのリストの n-1 番目を返す ;;; my-reverse-iter for my-reverse ;;; from が空になるまで、from から要素を取り出して、to に詰める (define (my-reverse-iter from to) (if (null? from) to (my-reverse-iter (cdr from) (cons (car from) to)))) ;;; (define (my-reverse x) (my-reverse-iter x (list))) ----- > (nth 3 (list 0 1 2 3 4 5)) 3 > (my-reverse (list 'a 'b 'c)) (c b a)この処理系が提供しているリストにまつわる関数も色々あります。
99.10.5/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp