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

Oha*_*had 1 haskell

这是折叠函数的类型.

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

kqr*_*kqr 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
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)

  • 它不是身份价值; 这是默认值.`foldr(:) []`和`fol​​dr(:) [1,2,3]`都有意义. (3认同)
  • 而对于具有ML背景的人来说,Haskell的`foldr`只需要一个参数. (2认同)