我很难理解用于currying的符号。也许这意味着我对这个问题有更深的困惑,但我不这么认为。
我理解如何......
add (x,y) = x + y
可以有(int, int) -> int
类型。
这也是有道理的,咖喱形式看起来像这样:
add x y = x + y
类型为int -> int -> int
,又称为int -> (int-> int)
。
我想知道最后一个例子中括号的含义。是第一个int
x
,第二个是int
y
,还是最后一个int
输出?这样的功能会是什么样的?
(int -> int) -> int
我知道有些东西不是点击而且非常令人沮丧。
答案 0 :(得分:4)
a -> b
形式的类型实际上只是意味着
函数采用类型
a
的值并返回类型b
的值
从那以后它只是重复申请更大的(多个箭头)类型,就像1 + 2 + 3 + 4
和1 + 2
完全不同。
一个潜在的绊脚石是这些价值观中的任何一个都可以成为一种功能。您对curry类型的解释是正确的,但请注意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个斐波纳契数的总和。