这是折叠函数的类型.
(a -> b -> b) -> b -> [a] -> b
Run Code Online (Sandbox Code Playgroud)
这是什么类型的?函数得到的参数是什么?它会得到2或3个参数吗?什么是回报值?
我知道 :
(a -> b -> b) - is the function foldr gets (like multiplication)
b - is the neutral value (such as 1 in multiplication)
Run Code Online (Sandbox Code Playgroud)
如果您有使用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
Run Code Online (Sandbox Code Playgroud)
如果您有使用函数式编程的经验,您可能希望像这样查看它:
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
Run Code Online (Sandbox Code Playgroud)