SICP 問題 2.39(fold-right と fold-left を使って reverse を実装)

【問題】

reverse(問題 2.18)の、問題 2.38 の fold-right と fold-left を使った、次の定義を完成せよ。

(define (reverse sequence)
  (fold-right (lambda (x y) <??>) '() sequence))

(define (reverse sequence)
  (fold-left (lambda (x y) <??>) '() sequence))

【解答】

fold-right の方からいこか。

(define (reverse sequence)
  (fold-right (lambda (x y)
		(append y (list x)))
	      '()
	      sequence))

では実験。


gosh> (reverse (list 1 4 9 16 25))
(25 16 9 4 1)
gosh>
おっけ〜。次、fold-left。

(define (reverse sequence)
  (fold-left (lambda (x y)
	       (cons y x))
	     '()
	     sequence))

ではこれも実験。


gosh> (reverse (list 1 4 9 16 25))
(25 16 9 4 1)
gosh>
よしよし、OKですな。