小编Dav*_*ham的帖子

Haskell"理解"咖喱函数定义吗?

在Haskell函数中,总是需要一个参数.通过Currying实现多个参数.既然如此,我可以看到两个参数的函数如何定义为下面的"func1".它是一个函数,它返回一个函数(闭包),它将外部函数的单个参数添加到返回函数的单个参数中.

但是,虽然这是curry函数的工作方式,但这不是定义双参数函数的常规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)
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
1
解决办法
188
查看次数

标签 统计

haskell ×1