(Integer->Integer) smallerc x y = if x Integer)-6ren">
gpt4 book ai didi

haskell - 如何理解Haskell中的 "Currying"?

转载 作者:行者123 更新时间:2023-12-02 05:43:54 24 4
gpt4 key购买 nike

假设有一个名为“smallerc”的函数

    smallerc :: Integer -> (Integer->Integer)
smallerc x y = if x <=y then x else y

为什么不使用声明函数:

    smallerc :: (Integer -> Integer) ->Integer

谢谢!

最佳答案

理解柯里化(Currying)的关键是理解不存在具有多个参数的函数。 haskell 中的每个 函数只有一个参数。但由于 -> 运算符的右结合属性,这还不是很清楚。

当你看到这个时:

Integer -> Integer -> Integer

等同于:

Integer -> (Integer -> Integer)

在这两种情况下,函数都接受一个Integer返回一个函数。 (返回的函数接受一个 Integer 并返回一个 Integer。)所以这可能类似于一个简单的数学运算;它接受一个 Integer(比方说 5)并返回一个函数,该函数接受另一个 Integer(又是 5)并将其添加到第一个,然后返回结果 (10) .

但是当你这样做的时候:

(Integer -> Integer) -> Integer

您创建了一些非常不同的东西 -- 一个接受一个函数并返回一个Integer 的函数。这也可以是一种实现数学函数的方法;但它不是将 Integer 作为第一个参数,而是采用数学运算本身!因此,例如,假设您向该函数传递了一个函数,该函数将向传递给它的任何内容加 5。然后此函数将 5 传递给 that 函数,并返回结果 (10)。

关于haskell - 如何理解Haskell中的 "Currying"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357668/

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