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



我正在尝试从列表中删除最大值和最小值。

filter (/= minimum [1,2,3,4] && /= maximum [1,2,3,4] ) [1,2,3,4]

不幸的是,每当我尝试这样做时,我都会在输入"\="时遇到解析错误有人知道这个错误背后的原因是什么吗?我该如何解决它?

修复

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 (not.flip elem [minimum xs, maximum xs]) xs
&& :: Bool -> Bool -> Bool
/= minimum [1,2,3,4], /= maximum [1,2,3,4] :: Int -> Bool

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

@josejuan已经给出了无点风格。除此之外,我会选择以下内容:

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

有了应用程序,它变得更加灵活,假设你还想过滤等于列表中第一个和最后一个元素的元素:

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

最新更新