问问题
202 次
2 回答
4
仔细看类型:
foldl1 :: Foldable t => (a -> a -> a) -> t a -> a
[Char]
在调用函数之前需要将值转换为,因为函数期望其参数的类型和返回类型相同。(并且只有第一次使用该函数会获得两个相同类型的参数。)
要使用foldl1
,请先映射show
列表。
foldl1 (++) (map show [12, 23, 45, 66])
于 2019-03-04T20:50:08.197 回答
3
如果查看 的类型签名foldl1 :: Foldable t => (a -> a -> a) -> t a -> a
,您会发现 lambda 必须返回与列表中的类型相同的类型。这是因为该返回值随后用于计算下一步。
这不会发生,foldl
因为 lambda 可以返回任何类型,因为该值仅用作累加器。我没有时间写一个更清晰的答案,但只是谷歌 foldl1 来了解其中的区别
于 2019-03-04T20:49:58.347 回答