gpt4 book ai didi

haskell - 带有中缀函数的偏应用

转载 作者:行者123 更新时间:2023-12-02 11:38:43 33 4
gpt4 key购买 nike

虽然我对数学意义上的柯里化(Currying)有一点了解,但部分应用中缀函数是我潜水后发现的一个新概念入书Learn You a Haskell for Great Good .

鉴于此功能:

applyTwice :: (a -> a) -> a -> a
applyTwice f x = f (f x)

作者以一种有趣的方式使用它:

ghci> applyTwice (++ [0]) [1]  
[1,0,0]
ghci> applyTwice ([0] ++) [1]
[0,0,1]

在这里我可以清楚地看到生成的函数有不同的参数通过了,考虑到它是柯里化(Currying)的,通过正常方式不会发生这种情况功能(会吗?)。那么,中缀切片有什么特殊处理吗? haskell ?它对所有中缀函数通用吗?

<小时/>

顺便说一句,这是我使用 Haskell 和函数式编程的第一周,我还在读这本书。

最佳答案

是的,您可以通过指定其左操作数或右操作数来部分应用中缀运算符,只需将另一个保留为空(正是在您编写的两个示例中)。

因此,([0]++)(++) [0]\x -> [0]++ 相同x (请记住,您可以通过括号将中缀运算符转换为标准函数),而 (++ [0]) 等于 \x -> x++ [0].

了解反引号 (``) 的用法也很有用,它使您能够在中缀运算符中使用两个参数来转换任何标准函数:

Prelude> elem 2 [1,2,3]
True
Prelude> 2 `elem` [1,2,3] -- this is the same as before
True
Prelude> let f = (`elem` [1,2,3]) -- partial application, second operand
Prelude> f 1
True
Prelude> f 4
False
Prelude> let g = (1 `elem`) -- partial application, first operand
Prelude> g [1,2]
True
Prelude> g [2,3]
False

关于haskell - 带有中缀函数的偏应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131300/

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