我有两个函数用于计算整数列表的长度。
lengthFoldl :: [Int] -> Int
lengthFoldl xs = (foldl (\_ y -> y+1) 0 xs)
并且
lengthFold :: [a] -> Int
lengthFold xs = foldr (\_ y -> y+1) 0 xs
它们是相同的,只是一个使用了foldr,另一个使用了foldl。
但是当尝试计算任何列表[1 .. n]
的长度时,我从lengthFoldl得到了一个错误的结果(比实际长度多1)。
lengthFoldl [42]
。 - n. m.lengthFoldl [41]
。42 应该是 答案。 :) :) - Will Ness