【发布时间】:2015-02-19 01:07:10
【问题描述】:
所以我在网上阅读 Haskell 指南,只是对中缀运算符和过滤器的组合感到好奇。
假设你有一个类似的函数
filter (>5) [6, 10, 5]
这将返回 [6,10],这似乎是过滤器应该工作的直观方式。
但是,做
filter ((>) 5) [6, 10, 5]
返回一个空列表(这仍然有意义,(>) 检查其第一个参数是否大于第二个参数)。
但是,过滤器通常定义为
filter :: (a -> Bool) -> [a] -> [a]
filter _ [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
当类型系统知道它有一个中缀运算符时,这些中缀运算符中的大多数是否编写为部分应用的函数需要原始前缀函数的前导参数?即中缀 > 定义为类似(屠宰语法)
infix> :: Int -> Int-> Bool
infix> x y = (>) y x
x infix> y = (>) x y
对不起,如果这个问题没有意义,我觉得当 p 是一个部分应用的中缀运算符时,我错过了如何评估 p x 的一些基本内容。
【问题讨论】:
标签: haskell