foldとfold-rightとapplyの違い
混乱しかけたので覚え書き。fold系(SRFI-1)とapplyはそもそも意味が違う。foldはリストの畳み込みを行うのに対し、applyはリストの要素を引数として手続きを呼ぶ
(fold + 1 '(2 3 4)) (fold-right + 1 '(2 3 4)) (apply + 1 '(2 3 4)) => 10 => 10 => 10 (fold append '() '((1 2) (3 4))) (fold-right append '() '((1 2) (3 4))) (apply append '() '((1 2) (3 4))) => (3 4 1 2) => (1 2 3 4) => (1 2 3 4) (fold append '(0) '((1 2) (3 4))) (fold-right append '(0) '((1 2) (3 4))) (apply append '(0) '((1 2) (3 4))) => (3 4 1 2 0) => (1 2 3 4 0) => (0 1 2 3 4) (fold list '0 '(1 2 3 4)) (fold-right list '0 '(1 2 3 4)) (apply list '0 '(1 2 3 4)) => (4 (3 (2 (1 0)))) => (1 (2 (3 (4 0)))) => (0 1 2 3 4)
参考:畳み込み関数の比較 (fold / accumulate / inject / reduce)
おまけ
(apply + 1 2 3 4 '()) => 10
素直に (+ 1 2 3 4) って書けっていう…