小编Sae*_*eas的帖子

部分应用的中缀运营商的困惑

所以我在线阅读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

3
推荐指数
1
解决办法
148
查看次数

标签 统计

haskell ×1