foldr函数的返回值是什么(在Haskell中),它得到的参数是什么?

时间:2014-05-10 08:12:26

标签: haskell

这是折叠函数的类型。

(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)

1 个答案:

答案 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