如何从Haskell中的列表中删除项目? 我有这个代码,但似乎没有用。它的概念,我有2个列表,aList总是只有一个元素。 bList将始终具有其在aList中的元素。所以我想从bList中删除元素,最后输出没有该项的新列表。可以提一些提示吗? 谢谢
removeFromList :: aList -> bList -> finalList
removeFromList [] _ = []
removeFromList (y:ys) (x:xs)
| y == x = removeFromDatabase y xs
| otherwise = y : removeFromDatabase y xs
答案 0 :(得分:2)
removeFromList :: Eq a => [a] -> [a] -> [a]
removeFromList _ [] = []
removeFromList (y:ys) (x:xs)
| y == x = removeFromList [y] xs
| otherwise = x : removeFromList [y] xs
有一些问题:
第一个列表应该包含该元素,但您似乎是从第一个子句中的第二个获取它,因此它应该是:
removeFromList _ [] = []
其次,您需要在进行递归调用时重新创建包含单个元素的列表,即removeFromList [y] xs
第三,列表类型应该相同,并且您需要Eq
的{{1}}约束
答案 1 :(得分:1)
只要您总是在aList
中有一个元素,我就提出另一个解决方案:
removeFromList :: Eq a => [a] -> [a] -> [a]
removeFromList [elem] = filter (== elem)
或者,如果您只有一个元素出现:
import Data.List
removeFromList [elem] = delete elem
但是请记住,如果第一个参数看起来是空的或者有多个元素,它将会失败。
代码中的问题:
aList
和bList
作为参数名称,而是将其作为函数签名中的类型变量,这些变量过于笼统(相当于removeFromList :: a -> b -> c
)y
是单个元素,而不是列表。