我需要在列表列表中找到一个元素l,删除包含该元素的每个列表,然后返回列表列表,但我不知道如何解析列表列表,同时时间,删除列表并保持解析列表的其余部分。
为了更容易理解,我有:
data Object = Pos Char | Neg Char
deriving (Show, Eq)
type Box = [Object]
type Formula = [Box]
findAndDelete :: Formula -> Object -> Formula
findAndDelete cs l
findAndDelete (c:cs) l
编辑:同时,我需要从公式中删除所有x元素,x由一个名为negative的函数返回,参数为l。
negative :: Object -> Object
negative (Pos v) = Neg v
negative (Neg v) = Pos v
答案 0 :(得分:1)
如果要删除框,可以过滤所有没有给定对象作为其元素的框。
import Data.List
findAndDelete :: Formula -> Object -> Formula
findAndDelete f o = filter (not . elem o) f
答案 1 :(得分:0)
由于您要删除包含该元素的Box
,您可以使用elem :: Eq a => a -> [a] -> Bool
来检查:
findAndDelete :: Formula -> Object -> Formula
findAndDelete [] o = []
findAndDelete (b:bs) o = case (elem o b) of {
True -> findAndDelete bs o;
False -> b:(findAndDelete bs o)
};
因此,要在findAndDelete
函数中删除负面对象,您可以使用filter :: (a -> Bool) -> [a] -> [a]
这将为您提供Box
,其中所有对象都满足谓词:
findAndDelete :: Formula -> Object -> Formula
findAndDelete [] o = []
findAndDelete (b:bs) o = case (elem o b) of {
True -> findAndDelete bs o;
False -> (filter ((/=) (negative o)) b):(findAndDelete bs o)
};