(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