Я играл с Haskell и ghci, когда обнаружил, что меня действительно беспокоит:
foldl (++) [[3,4,5], [2,3,4], [2,1,1]] []
Я ожидал получить это: [3,4,5,2,3,4,2,1,1]
Однако он получает:
[[3,4,5],[2,3,4],[2,1,1]]
Насколько я понимаю foldl, так и должно быть:
(([] ++ [3, 4, 5]) ++ [2, 3, 4]) ++ [2, 1, 1]
Если я наберу это в ghci, то это действительно будет [3,4,5,2,3,4,2,1,1]
.
И еще одна странная вещь заключается в следующем:
Prelude> foldl1 (++) [[3,4,5], [2, 3, 4], [2, 1, 1]]
[3,4,5,2,3,4,2,1,1]
Я ожидаю, что foldl и foldl1 будут вести себя одинаково. Так что же на самом деле делает foldl?