R6RSのfold

R6RSからはfoldの仕様が普通になるようだ。よかった。

畳み込み関数の比較 (fold / accumulate / inject / reduce) - blanket sky
shiro
SchemeR6RSではfold-left/fold-rightとなって、Haskellのfoldl/foldrと同じになります。
srfi-1のfoldはちょっと特殊ですね。

http://d.hatena.ne.jp/blanketsky/20071129/1196329379

念のためネタもとも見ておく。

R6RS:標準ライブラリ
foldのかわりにfold-leftが提供されます。意味的にはfold-leftとfold-rightの 対の方が一貫性があります。
fold op s (x0 x1 ... xn-1 xn) = (xn op (xn-1 op (...(x1 op (x0 op s))...)))
fold-left op s (x0 x1 ... xn-1 xn) = *1...)))

http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%e6%a8%99%e6%ba%96%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa

あれ?srfiじゃなくてR6RSレベルで仕様が決まるの?

R6RS:FAQ
実用的なクロス実装ライブラリを書くのに必要なインフラを 仕様に盛りこむことを第一の目的として、R6RSはデザインされました。
R6RSを非採用とする実装も、R6RSを全否定しているわけではありません。共通モジュールシステムや、豊富なライブラリの有用性についてはむしろ認めている人々が多数です。揉めているのは、それらを仕様に入れるべきか否か
R6RSに賛成しなかった実装者も、共通ライブラリの重要性は認めていて、 R6RSより緩い縛り(SRFI)でそれらを整備してゆこうという動きになっています。詳しくはERR5RSを参照してください。

http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3aFAQ

なるほど、R6RSはまさにそれが目的だったのか。

*1:...((s op x0) op x1) ... xn-1) op xn) fold-right op s (x0 x1 ... xn-1 xn) = (x0 op (x1 op (...(xn-1 op (xn op s