我正在尝试从列表中删除最大值和最小值。
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]