1

我很难理解用于柯里化的符号。也许这意味着我对这个主题有更深的困惑,但我不这么认为。

我明白像...

add (x,y) = x + y可以有一个类型(int, int) -> int

咖喱形式看起来像这样也很有意义:

add x y = x + y与 type int -> int -> int,又名 type int -> (int-> int)

我想知道最后一个例子中括号的含义。第一个int x、第二个int y和最后一个int是输出吗?像这样的功能会是什么样子?

(int -> int) -> int

我知道有些东西没有点击,这非常令人沮丧。

4

1 回答 1

4

表格的类型a -> b真的只是意味着

函数接受一个类型的值a并返回一个类型的值b

从那里开始,它只是对更大(多个箭头)类型的重复应用,很像1 + 2 + 3 + 41 + 2. 一个潜在的绊脚石是这些值中的任何一个都可以是函数本身。您对 curried 类型的解释是正确的,但请注意,add x它本身就是一个有效的表达式,并给出了另一个函数(一个在返回 之前只需要一个参数的函数int)。

至于第二种:就像int -> (int -> int)是类型

取一个int并返回一个函数int -> int

类型(int -> int) -> int意味着

接受一个函数int -> int并返回一个int

它是一个高阶函数,一个接受函数作为参数的函数。一个并非完全无用的示例是函数sum0To100 f = sum (map f [0 .. 100])(或任何其他范围的等效函数)。例如,sum0To100 fib是前 100 个斐波那契数的总和。

于 2013-07-30T21:04:57.133 回答