haskell - 从子列表中删除
问题描述
我正在尝试使用高阶函数从子列表中删除一个数字(如果存在)。
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's
( )的列表:[[a]]
a
[[a]]
removeAll :: Eq a => a -> [[a]] -> [[a]]
removeAll v (list:listOfLists) = ???
我们正在从列表中的v
每个中删除所有内容。另一种说法是“for each in our filter out ”。list
(list:listOfLists)
list
listOfLists
v
因此,我们希望对列表中的每个值执行相同的操作(过滤器)。在 Haskell 中,这转化为将过滤器操作映射到list
.listOfLists
removeAll :: Eq a => a -> [[a]] -> [[a]]
removeAll v xs = map (filter (/= v)) xs
推荐阅读
- java - 如何在从返回 0:255 或 -1 之间的 int 的 FileInputStream.read() 分配的 int 的前 3 位中查找模式?
- python - 为什么 SimpleITK 不使用 imageJ 显示图像?
- database - 数据库 - 表只包含主键和外键
- ios - ios 快速缩略图生成
- drupal-8 - 如何使用 drupal 8 以编程方式在自定义块内呈现自定义表单?
- python - 使用 pandas 组内的多个条件检查值是否存在
- c - 关于 C 中内存使用的问题
- c++ - 我正在尝试制作一个自平衡机器人,但编译时出错。我不知道如何解决它
- spring - 不使用注释的 Spring MVC 重定向
- maxima - Maxima 中 Maple “unapply”或 Mathematica “Function”的模拟