这是折叠函数的类型。
(a -> b -> b) -> b -> [a] -> b
这是什么类型的? 函数得到的参数是什么?它会得到2或3个参数吗?什么是回报值?
我知道:
(a -> b -> b) - is the function foldr gets (like multiplication)
b - is the neutral value (such as 1 in multiplication)
答案 0 :(得分:5)
如果您有使用Java和Python等命令式语言的经验,可以这样查看:
foldr
有三个参数:一个函数,一个标识值和一个列表。然后它返回一个累计值。
你是对的a -> b -> b
是函数,b
是标识值。然后[a]
是列表,第二个b
是返回值,这是函数的结果。
示例:
function
| identity value
| | list
| | |
v v v
> foldr (*) 1 [1, 2, 3, 4]
24 <-- return value
如果您有使用函数式编程的经验,您可能希望像这样查看它:
foldr
有两个参数:组合函数和标识值。然后它返回一个获取列表并返回累计值的函数。
在这种情况下,a -> b -> b
仍然是组合函数,b
是标识值。然后返回值变为[a] -> b
,这是一个获取列表并返回累计值的函数。
示例:
combining function
returned function | identity value
| | |
v v v
> let multiply = foldr (*) 1
> -- since the returned function is of type [a] -> b, we give
> -- it a list and it gives us the accumulated value back
> multiply [1, 2, 3, 4]
24