所以我在线阅读Haskell指南,并对中缀运算符和过滤器的组合感到好奇.
假设你有类似的功能
filter (>5) [6, 10, 5]
Run Code Online (Sandbox Code Playgroud)
这将返回[6,10],这似乎是过滤器应该工作的直观方式.
但是,干嘛
filter ((>) 5) [6, 10, 5]
Run Code Online (Sandbox Code Playgroud)
返回一个空列表(这仍然有意义,(>)检查它的第一个参数是否大于第二个参数).
但是,过滤器通常定义为
filter :: (a -> Bool) -> [a] -> [a]
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
Run Code Online (Sandbox Code Playgroud)
当类型系统知道它有一个中缀运算符时,是否大多数中缀运算符被写入,以便部分应用的函数需要原始前缀函数的前导参数?ie是infix>定义为类似的东西(butchered syntax)
infix> :: Int -> Int-> Bool
infix> x y = (>) y x
x infix> y = (>) x y
Run Code Online (Sandbox Code Playgroud)
很抱歉,如果这个问题没有意义,我觉得当p是部分应用的中缀运算符时,我遗漏了一些基本的px评估方法.
haskell ×1