理系学生日記

おまえはいつまで学生気分なのか

問題2-38

今まで、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の性質は何かって話みたいなんですけど、交換法則がなりたてばいいですたぶん。