高阶函数(不连续,咖喱)

Cat*_*yLu 0 haskell

我正在使用这些功能:

cplus a b = a+b   

ucplus(a, b) = a+b
Run Code Online (Sandbox Code Playgroud)

......做这个实验:

uncurry cplus=\(a, b) -> cplus a b  
Run Code Online (Sandbox Code Playgroud)

(a,b)是函数的参数cplus,所以方程的右边实际上是在执行函数cplus a b.

为什么uncurry cplus等于等式的右边?

nor*_*gon 6

uncurry 定义如下:

uncurry f = \(a,b) -> f a b
Run Code Online (Sandbox Code Playgroud)

当你将函数uncurry应用于函数时f,它会返回一个类似的函数f,但是你会得到一个带有元组的函数,而不是'curried'函数.

类型签名uncurry(a -> (b -> c)) -> ((a, b) -> c).也就是说,它采用类型a -> (b -> c)的函数并返回类型的函数(a, b) -> c.

cplus是一个curried函数 - 这意味着,它是一个返回另一个函数的函数.咖喱形式cplus可以写成:

cplus = (\a -> (\b -> a + b))
Run Code Online (Sandbox Code Playgroud)

但在大多数函数式语言中,语法cplus a b = a+b是等价的.

  • uncurry 是一个函数,它接受一个函数作为参数,并返回另一个函数。输入函数是一个以“a”为参数的函数,并返回一个函数“b -> c”。输出函数是一个以“(a,b)”为参数并返回“c”的函数。 (2认同)