gpt4 book ai didi

Haskell: Uncurry, Curry, 组合

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

当我输入以下内容时,我无法理解编译器的作用:

(curry . uncurry) (+) 1 2 
在我理解之后,编译器首先使用 uncurry,这意味着会发生错误,因为 uncurry 函数需要这样的输入:
(curry . uncurry) (+) (1,2)
但显然第一个是对的。我不明白为什么。
编译器在评估这个时到底采取了哪些步骤?
另一个 主题包括问题:
为什么
(uncurry . curry) (+) (1,2) 
不起作用?

最佳答案

After my understanding the compiler goes with uncurry.


不,它适用于 (curry . uncurry)如果我们评估 (curry . uncurry)我们看到这个函数的缩写:
\x -> curry (uncurry x)
所以 (curry . uncurry) (+) 1 2函数的缩写为:
(\x -> curry (uncurry x)) (+) 1 2
或因此:
(curry (uncurry (+))) 1 2
uncurry :: (a -> b -> c) -> (a, b) -> c curry :: ((a, b) -> c) -> a -> b -> c 从而变换一个函数。因此,这意味着 uncurry (+)确实需要一个二元组:
uncurry (+) :: Num a => (a, a) -> a
但现在通过 curry 传递这个函数功能:
curry (uncurry (+)) :: Num a => a -> a -> a
所以 curry函数撤消转换 uncurry (+)功能。因此,这意味着 curry (uncurry (+))(+) 相同, 因此:
(curry (uncurry (+))) 1 2
相当于:
(+) 1 2
这因此等价于 3 . curry . uncurry不完全等同于 id但是,由于它具有 as 类型:
curry . uncurry :: (a -> b -> c) -> a -> b -> c
因此,这意味着它将函数限制为类型为 a -> (b -> c) 的函数。 .

关于Haskell: Uncurry, Curry, 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970142/

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