2015/10/21

SICP 問題 2.38

(define (fold-left op initial sequence)
  (define (iter result rest)
    (if (null? rest)
        result
        (iter (op result (car rest))
              (cdr rest))))
  (iter initial sequence))

(define (fold-right op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (fold-right op initial (cdr sequence)))))
gosh> (fold-right / 1 (list 1 2 3))
3/2
gosh> (fold-left / 1 (list 1 2 3))
1/6
gosh> (fold-right list nil (list 1 2 3))
(1 (2 (3 ())))
gosh> (fold-left list nil (list 1 2 3))
(((() 1) 2) 3)

fold-rightとfold-leftによってopが満たすべき条件は+や×のように順番に影響されない手続きであること.


© 2022 wat-aro