Parsing Haskell:从最小值和最大值筛选列表

Parsing Haskell:从最小值和最大值筛选列表,parsing,haskell,filter,Parsing,Haskell,Filter,我试图从列表中删除最大值和最小值 filter (/= minimum [1,2,3,4] && /= maximum [1,2,3,4] ) [1,2,3,4] 不幸的是,每当我尝试这样做时,我都会在输入“\=”上得到一个解析错误 有人知道这个错误背后的原因吗?我如何解决它?Fix filter (\x -> x /= minimum [1,2,3,4] && x /= maximum [1,2,3,4]) [1,2,3,4] 作为一项功能 remov

我试图从列表中删除最大值和最小值

filter (/= minimum [1,2,3,4] && /= maximum [1,2,3,4] ) [1,2,3,4]
不幸的是,每当我尝试这样做时,我都会在输入“\=”上得到一个解析错误 有人知道这个错误背后的原因吗?我如何解决它?

Fix

filter (\x -> x /= minimum [1,2,3,4] && x /= maximum [1,2,3,4]) [1,2,3,4]
作为一项功能

removeMinMax xs = filter (\x -> x /= minimum xs && x /= maximum xs) xs
无点(过滤器)

修理

作为一项功能

removeMinMax xs = filter (\x -> x /= minimum xs && x /= maximum xs) xs
无点(过滤器)

您已尝试使用
Bool->Bool->Bool->Bool
运算符链接两个
Int->Bool
函数。您需要将它们包装在lambda中(并应用缺少的
Int
),或者放入数组并使用
all


您已尝试使用
Bool->Bool->Bool->Bool
运算符链接两个
Int->Bool
函数。您需要将它们包装在lambda中(并应用缺少的
Int
),或者放入一个数组并使用
all

@josejuan已经给出了一个无点样式。除此之外,我还想说:

f xs = filter (flip notElem $ [maximum, minimum] <*> pure xs) xs
f xs=filter(flip notElem$[最大值,最小值]纯xs)xs
有了应用程序,它变得更加灵活,比如说,您还想过滤等于列表中第一个和最后一个元素的元素:

f xs = filter (flip notElem $ [maximum, minimum, head, last] <*> pure xs) xs

> f [2,1,5,3,42]
[5,3]
f xs=filter(flip notElem$[maximum,minimum,head,last]纯xs)xs
>f[2,1,5,3,42]
[5,3]

@josejuan已经给出了一个无分的风格。除此之外,我还想说:

f xs = filter (flip notElem $ [maximum, minimum] <*> pure xs) xs
f xs=filter(flip notElem$[最大值,最小值]纯xs)xs
有了应用程序,它变得更加灵活,比如说,您还想过滤等于列表中第一个和最后一个元素的元素:

f xs = filter (flip notElem $ [maximum, minimum, head, last] <*> pure xs) xs

> f [2,1,5,3,42]
[5,3]
f xs=filter(flip notElem$[maximum,minimum,head,last]纯xs)xs
>f[2,1,5,3,42]
[5,3]

太好了,我的算法现在可以运行了。非常感谢您的快速响应。太好了,我的算法现在可以工作了。非常感谢您的快速回复。谢谢您的解释。现在我终于知道为什么它不起作用了。谢谢你的解释。现在我终于知道它为什么不起作用了。您没有要求这样做,但是您应该使用
let
where
来绑定筛选器外部的最小值和最大值——按照上述方式执行筛选器可能会导致为每个列表元素重新计算最小值和最大值,导致二次复杂度而不是线性复杂度。您没有要求这样做,但您应该使用
let
where
来绑定筛选器外部的最小值和最大值——按照上述方式执行筛选器可能会导致为每个列表元素重新计算最小值/最大值,从而导致二次复杂度而不是线性复杂度。