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))
では実験。
おっけ〜。次、fold-left。
gosh> (reverse (list 1 4 9 16 25))
(25 16 9 4 1)
gosh>
(define (reverse sequence) (fold-left (lambda (x y) (cons y x)) '() sequence))
ではこれも実験。
よしよし、OKですな。
gosh> (reverse (list 1 4 9 16 25))
(25 16 9 4 1)
gosh>