gpt4 book ai didi

haskell - 是否可以看出 "currying"是 "partial application"的相反操作?

转载 作者:行者123 更新时间:2023-12-02 00:22:35 26 4
gpt4 key购买 nike

我通过阅读“Learn You a Haskell for Great Goog!”一书来学习 Haskell。我想确保我正确理解这是“柯里化(Currying)”。

我知道函数不能获取多个参数。当一个函数有多个参数时,它实际上就像一个只有一个参数的函数。 IE。这个:

func :: Int -> Int -> Int -> Int

像这样工作(并且是相同的):

func :: Int -> (Int -> (Int -> Int))

即一个函数返回一个函数,该函数也返回一个函数,等等。这种“嵌套娃娃”行为称为“柯里化(Currying)”(柯里化(Currying)函数)。代码的第一个变体就像“语法糖”。

任何参数超过零的函数都可以部分应用。 IE。可以看出,“柯里化(Currying)”是“部分应用”的反向操作。。我说得对吗?

最佳答案

没有。

柯里化(Currying)的逆向是非柯里化(Currying)

f :: a -> b -> c

f' :: (a, b) -> c
f' = -- uncurried f

f'' :: a -> b -> c
f'' = -- curried f' = f

柯里化(Currying)函数尽管将其“语言”元数减少到 1,但仍保持“语义”元数不变(因为您仍然必须为元组提供每个值)。比较中唯一改变的是传递参数的方式。

部分应用是将函数的元数减少到大于0的数字的应用。这是一个不可逆操作;您无法取消应用参数。

--   1    2
f :: a -> b -> c

-- 1
f' :: b -> c
f' = f c -- partially applied f

-- 0 arguments
f'' :: c
f'' = f c1 c2 -- fully applied f

关于haskell - 是否可以看出 "currying"是 "partial application"的相反操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210958/

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