Czytam learnyouahaskell.com i obecnie badam fałdy. W książce znajdują się te przykłady:Dlaczego te fałdy zatrzymują się na głowie/ogonie?
maximum' :: (Ord a) => [a] -> a
maximum' = foldr1 (\x acc -> if x > acc then x else acc)
reverse' :: [a] -> [a]
reverse' = foldl (\acc x -> x : acc) []
product' :: (Num a) => [a] -> a
product' = foldr1 (*)
filter' :: (a -> Bool) -> [a] -> [a]
filter' p = foldr (\x acc -> if p x then x : acc else acc) []
head' :: [a] -> a
head' = foldr1 (\x _ -> x)
last' :: [a] -> a
last' = foldl1 (\_ x -> x)
Rozumiem, wszyscy z wyjątkiem head'
i tail'
.
Rozumiem, że funkcja binarna powinna zostać zastosowana do akumulatora i każdego elementu na liście, a następnie przejść przez całą listę. Dlaczego to zatrzymuje się na głowie (lub ogonie, odpowiednio)?
Rozumiem, _
(podkreślenie) oznacza "cokolwiek" lub "nie obchodzi mnie to", ale jak to się dzieje, przechodząc przez całą listę?
Czy leniwy szacunek Haskella nie przyspieszyłby "głowy" w poście? 'foldr1 (\ x _ -> x) [1..10000000000000000]' trwa mniej niż mrugnięcie, aby uruchomić w GHCi. –
Leniwa ocena! – augustss