我试图通过阅读各种博客来理解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/

10-12 03:46