我正在使用这些功能:
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等于等式的右边?
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是等价的.
| 归档时间: |
|
| 查看次数: |
4770 次 |
| 最近记录: |