Haskell - 在列表

时间:2017-04-16 15:32:27

标签: list haskell

我需要在列表列表中找到一个元素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

2 个答案:

答案 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)
                          };