【发布时间】:2018-04-18 22:14:34
【问题描述】:
在 Haskell 中,函数总是有一个参数。多个参数通过Currying 实现。既然如此,我可以看到两个参数的函数如何定义为下面的“func1”。它是一个返回函数(闭包)的函数,它将外部函数的单个参数添加到返回函数的单个参数中。
然而,虽然这是柯里化函数的工作原理,但这并不是定义双参数函数的常规 Haskell 语法。相反,我们被教导定义像“func2”这样的函数。
我想知道 Haskell 如何理解 func2 的行为方式应该与 func1 相同。 func2 的定义并没有告诉我它是一个返回函数的函数。相反,它实际上看起来像一个双参数函数,我们被告知不存在!
这里有什么诀窍? Haskell 是不是刚出生就知道我们可以用这种教科书的方式定义多参数函数,并且它们以我们期望的方式工作?也就是说,这是一个似乎没有明确记录的语法约定(Haskell 知道您的意思,并会为您提供缺少的函数返回),还是有其他一些魔法在起作用或我遗漏了什么?
func1 :: Int -> (Int -> Int)
func1 x = (\y -> x + y)
func2 :: Int -> Int -> Int
func2 x y = x + y
main = do
print (func1 7 9)
print (func2 7 9)
【问题讨论】:
-
Haskell 将
func2翻译成func1。
标签: haskell