gpt4 book ai didi

haskell - 在 Haskell 中使用一元函数和柯里化(Currying)定义加法?

转载 作者:行者123 更新时间:2023-12-02 13:43:40 25 4
gpt4 key购买 nike

我是一个 Haskell 初学者,试图理解柯里化(Currying)。我已经看过一些应该证明它的例子,但它们涉及二元运算符,它们本身就是柯里化(Currying)的,使我的思想陷入无限递归。如果 Haskell 中的运算符是函数,并且所有函数都是一元函数和柯里化(Currying)函数,我可以仅用一元函数定义自己的加法函数吗?

最佳答案

是的。

add :: Num a => a -> a -> a
add = \a -> \b -> a + b

这也是一个闭包的例子。 \b -> a + b 可以通过闭包访问 a,因为 a 是在该 lambda 范围之外定义的。

编辑

这些被称为皮亚诺数值

data Nat = Zero | Succ Nat                   

add Zero = \n -> n
add (Succ a) = \b -> Succ (add a b)

toNat 0 = Zero
toNat n = Succ (toNat (n-1))

fromNat Zero = 0
fromNat (Succ n) = 1 + fromNat n


λ: fromNat $ add (toNat 3) (toNat 4)
7

关于haskell - 在 Haskell 中使用一元函数和柯里化(Currying)定义加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com