虽然我对数学意义上的一些了解有些了解,
应用infix函数是我潜水后发现的新概念
放入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]
在这里我可以清楚地看到结果函数具有不同的参数
通过,考虑到它是咖喱,通常不会发生
功能(会吗?)。那么,对infix分段是否有任何特殊处理?
haskell ?它对所有中缀函数通用吗?
附带说明,这是我与Haskell和函数式编程的第一周,
而且我还在读书。
最佳答案
是的,您可以通过指定其左操作数或右操作数来部分应用一个infix运算符,而将另一个保留为空白(恰好在您编写的两个示例中)。
因此,([0] ++)
与(++) [0]
或\x -> [0] ++ x
相同(请记住,您可以通过括号将中缀运算符转换为标准函数),而(++ [0])
等于\x -> x ++ [0]
。
还要知道反引号(``)的用法,这使您可以在infix运算符中使用两个参数来打开任何标准函数:
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 - 具有Infix功能的部分应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10131300/