List 从子列表中删除
我试图使用高阶函数从子列表中删除一个数字(如果存在)List 从子列表中删除,list,haskell,higher-order-functions,sublist,remove,List,Haskell,Higher Order Functions,Sublist,Remove,我试图使用高阶函数从子列表中删除一个数字(如果存在) removeAux :: Int -> [[Int]] -> (Int -> [Int] -> Bool) -> [[Int]] removeAux num (l:ls) f | f num l = delete num l -- ERROR in this line |otherwise = removeAux num ls f removeFromSublists :: Int -> [[
removeAux :: Int -> [[Int]] -> (Int -> [Int] -> Bool) -> [[Int]]
removeAux num (l:ls) f
| f num l = delete num l -- ERROR in this line
|otherwise = removeAux num ls f
removeFromSublists :: Int -> [[Int]] -> [[Int]]
removeFromSublists _ [[]] = [[]]
removeFromSublists num ls = removeAux num ls (elem)
假设它是这样工作的:
> l = [[0,1,2],[2,3]]
> removeFromSublists 1 l
[[0,2],[2,3]]
> removeFromSublists 0 l $ removeFromSubLists 1 l
[[2],[2,3]]
> removeFromSublists 2 l
[[0,1],[3]]
但我有两个问题,我不知道如何解决。首先,它不会删除所有出现的数字,它应该删除吗?我不明白为什么代码不起作用?
我不断发现错误:
有人能帮我吗?在这里采用类型驱动的方法可能会有所帮助。与中一样,您希望从元素列表中删除某些元素的所有引用 这就是,“给定
a
和a的列表([[a]]
)返回a的列表([[a]]
):
removeAll::Eq a=>a->[[a]]->[[a]]
removeAll v(列表:列表)=???
我们正在从列表(列表:ListofList)
中的每个列表中删除所有v
。另一种说法是“对于我们的列表中的每个列表
,过滤掉v
”
因此,我们希望对列表中的每个值执行相同的操作(筛选)。在Haskell中,这转化为将筛选操作映射到列表中的每个列表
removeAll::Eq a=>a->[[a]]->[[a]]
移除所有v xs=map(过滤器(/=v))xs
在我看来,最简单的方法就是将lists@RobinZigmond对不起,我不知道怎么办?!