今まで、accumulate大人気だったんですけど、強制的に改名されてしまった。
名前をfold-rightとかいう。
野口英世もそうですし、豊臣秀吉もそうで、accumulateも名前を変えてたぶんだけど出世するんです!
ここで、モンキッキーとかハッピーハッピー。も名前を変えたけど、そういう都合の悪いこととかは考えない。
余談ですけど、Mother2にはハッピーハッピー教があるので、ハッピーハッピー。はそういうところで重宝がられると思ったりしました。
人というのはどこかで必要とされるもんなんだなー。
(define (fold-right op initial sequence) (if (null? sequence) initial (op (car sequence) (fold-right op initial (cdr sequence)))))
fold-rightには兄弟がいて、fold-leftとかいう。
(define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence))
ちょっとだけ違う。違うからこんなことになります。
(fold-right / 1 (list 1 2 3)) ; 3/2 (fold-left / 1 (list 1 2 3)) ; 1/6 (fold-right list () (list 1 2 3)) ; (1 (2 (3 ()))) (fold-left list () (list 1 2 3)) ; (((() 1) 2) 3)
問題は、fold-rightとfold-leftが同じ答えを作るときのopの性質は何かって話みたいなんですけど、交換法則がなりたてばいいですたぶん。