gpt4 book ai didi

haskell - 从子列表中删除

转载 作者:行者123 更新时间:2023-12-04 08:38:00 24 4
gpt4 key购买 nike

我正在尝试使用高阶函数从子列表中删除一个数字(如果存在)。

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]]
但是我有两个问题,我不知道如何解决。首先它不会删除所有出现的数字,它应该吗?我不明白为什么代码不起作用?
我不断收到错误:
enter image description here
有人能帮助我吗?

最佳答案

在这里采用类型驱动的方法可能会有所帮助。如在,您想从元素列表中删除某个元素的所有出现。
这是,“给定一个 a 和一个 a's( [[a]])的列表,返回一个 a 的列表([[a]]):

removeAll :: Eq a => a -> [[a]] -> [[a]]
removeAll v (list:listOfLists) = ???
我们正在删除所有 v从每个 list在列表中 (list:listOfLists) .另一种说法是“对于我们 list 中的每个 listOfLists 过滤掉 v”。
因此,我们希望对列表中的每个值执行相同的操作(过滤器)。在 Haskell 中,这意味着将过滤器操作映射到每个 list 上。在 listOfLists .
removeAll :: Eq a => a -> [[a]] -> [[a]]
removeAll v xs = map (filter (/= v)) xs

关于haskell - 从子列表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64706376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com