Programming/Scheme/SRFI1

めも

foldとreduce

reduceはfoldより1回関数呼び出しが少ない

guile> (fold (lambda (x y) (display (list x y)) (newline) (+ x y))  0 '(1 2 3 4))
(1 0)
(2 1)
(3 3)
(4 6)
10
guile> (reduce (lambda (x y) (display (list x y)) (newline) (+ x y))  0 '(1 2 3 4))
(2 1)
(3 3)
(4 6)
10
guile> (fold (lambda (x y) (display (list x y)) (newline) (+ x y))  2 '(1 2 3 4))
(1 2)
(2 3)
(3 5)
(4 8)
12
guile> (reduce (lambda (x y) (display (list x y)) (newline) (+ x y))  2 '(1 2 3 4)) ;; 正しくない使い方
(2 1)
(3 3)
(4 6)
10

reduce第2引数ridentityは(f ridentity x) = xでないといけない

普通は使わないけど,reduceの第3引数のlistが空のときのみ返される.以下は実験用の不正なコード.

guile> (reduce (lambda (x y) (display (list x y)) (newline) (+ x y))  #t '(1 2))
y))  #t '(1 2))
(2 1)
3
guile> (reduce (lambda (x y) (display (list x y)) (newline) (+ x y))  #t '(1))
y))  #t '(1))
1
guile> (reduce (lambda (x y) (display (list x y)) (newline) (+ x y))  #t '())
y))  #t '())
#t

Search

Blog

Twitter

Wassr

Recommend


とりあえず買っとく?

Ads

ドミノ・ピザ 5%OFF!

 iTunes Store(Japan)

KINOWIKI

Total: 87

Today: 1

Yesterday: 3

edit

Counter

total : 00059982
today : 00000043