【发布时间】:2018-02-12 23:58:59
【问题描述】:
我有以下自定义数据类型:
data Particle = Foo String | Goo String
通过以下调用:
func [[Foo "a"], [Goo "b", Foo "a"], [Goo "a"], [Foo "d"]]
函数定义为:
func :: [[Particle]] -> [[Particle]]
我想过滤粒子的嵌套列表,以便我的输出如下:
[[], [Goo "b"], [Foo "d"]]
为了用文字解释func在做什么,它看一下第一个列表中的第一个Particle,它被确定为Foo“a”。它从所有列表中删除 Foo "a",如果它碰巧在任何列表(包括第一个列表)中找到一个 Goo "a",它会完全破坏包含它的列表。
但我的输出似乎是错误的。我来了
[[Goo "a"], [Foo "d"]]
我应该什么时候得到
[[], [Goo "b"], [Foo "d"]]
(这是因为Foo“a”从第一个和第二个列表中删除,Goo“a”销毁第三个列表,第四个列表保持不变,见下列表)
为了便于阅读,复制列表
[[Foo "a"], [Goo "b", Foo "a"], [Goo "a"], [Foo "d"]]
有什么帮助吗?我知道 filter 和 elem 是必需的(我一直在使用它们,但无法获得正确的顺序),但我似乎无法正确实现。
编辑:已解决。我不得不在列表理解上投入更多时间。谢谢。
【问题讨论】:
-
您似乎在询问同一问题的重复、细微变化(如stackoverflow.com/questions/48739022/… 和stackoverflow.com/questions/48739861/…)。一些较早的 cmets(“我无法以任何方式更改此定义或解决它”)表明这是一项家庭作业。怎么回事?
标签: list haskell functional-programming