LINUX.ORG.RU

> cat foo.hs
main = putStrLn $ show r
	where r = foldl (/) 1 [1, 2, 3]
> runhugs foo.hs
0.166666666666667

> cat bar.hs
main = putStrLn $ show r
	where r = foldr (/) 1 [1, 2, 3]
> runhugs foo.hs
1.5

Begemoth ★★★★★
()
Ответ на: комментарий от seiken

Ага. При этом все они работают по-разному.

(fold - 0 '(1 2 3)) --> (fold - (- 1 0) '(2 3)) --> (fold - (- 2 (- 1 0)) '(3)) --> (- 3 (-2 (-1 0))) --> 2

(fold-right - 0 '(1 2 3)) --> (- 1 (fold-right - 0 '(2 3))) --> (- 1 (- 2 (fold-right - 0 '(3)))) -> (- 1 (- 2 (-3 0))) --> 2

foldr (-) 0 [1,2,3] --> foldr (-) (3 - 0) [1,2] --> foldr (-) (2 - (3 - 0)) [1] --> (1 - (2 - (3 - 0))) --> 2

foldl (-) 0 [1,2,3] --> foldl (-) (0 - 1) [2,3] -->  foldl (-) ((0 - 1) -2) [3] --> (((0 - 1) - 2) - 3) --> -6

grob ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.