(reduce + 0 (list 1 2 3) から
(+ 1 (reduce + 0 (list 2 3) に至る過程
(list-sum (list 1 2 3))
= (reduce + 0 (list 1 2 3))
= …
= (+1 (reduce + 0 (list 2 3)))
= …
= (+1 (+2 (reduce + 0 (list 3))))
= …
= (+1 (+2 (+3 (reduce + 0
empty))))
= ...
= (+1 (+2 (+3 0)))
= …
= 6
(reduce + 0 (list 1 2 3))
= (cond
[(empty? (list 1 2 3)) 0]
[else (+ (first (list 1 2 3))
(reduce + 0 (rest (list 1 2 3))))])
= (cond
[false 0]
[else (+ (first (list 1 2 3))
(reduce + 0 (rest (list 1 2 3))))])
= (+ (first (list 1 2 3))
(reduce + 0 (rest (list 1 2 3))))
= (+ 1 (reduce + 0 (rest (list 1 2 3))))
= (+ 1 (reduce + 0 (list 1 2)))
この
部分は
これは,
(define (reduce op base L)
(cond
[(empty? L) base]
[else (op (first L)
(reduce op base (rest L)))]))
のop を+ で,base を0 で,Lを(list 1 2 3) で置き換えたも
の22