我试图通过阅读各种博客来理解currying并叠加流式答案,我想我理解了一些东西。在Haskell中,每个函数都是经过 curry 处理的,这意味着当您拥有f x y = x + y
之类的函数时
真的是((f x) y)
在这种情况下,函数最初将第一个参数“x”作为参数,并将其部分应用于函数f,函数f随后返回y的函数。其中仅需y一个参数并应用该函数。在这两种情况下,函数仅采用一个参数,将函数简化为采用单个参数的过程也称为“currying”。如果我的理解错了,请纠正我。
因此,如果正确,您能否告诉我函数“两个”和“三个”是否为 curry 函数?
three x y z = x + y + z
two = three 1
same = two 1
在这种情况下,我有两个专门的功能,“两个”和“相同”,它们被简化为仅包含一个参数,因此可以使用吗?
最佳答案
让我们先来看two
。
它具有以下特征
two :: Num a => a -> a -> a
暂时忘记
Num a
(这只是对a
的限制-您可以在此处阅读Int
)。当然这也是一个 curry 函数。
下一个更有趣:
same :: Num a => a -> a
(顺便说一句:好听的名字-相同但不完全相同 id ^^)
TBH:我不确定。
我所知道的关于 curry 函数的最佳定义是:
(如果您愿意,可以将其扩展为完全 curry 函数)
仅当您将常数定义为具有0个参数的函数时,这才适合-您一定可以。
所以我想说是(?)这也是一个 curry 函数,但仅以数学边界的方式(例如0个数字的总和被定义为0)
关于haskell - 以下代码是否真的在haskell中出现了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25840187/