Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell在筛选列表的列表时访问子列表_Haskell - Fatal编程技术网

Haskell在筛选列表的列表时访问子列表

Haskell在筛选列表的列表时访问子列表,haskell,Haskell,我是Haskell的新手,尝试实现以下目标: filter (((!!) subList (fromJust (elemIndex String [String]))) == String) [[string]] 我用它们的类型替换了名称,以便于阅读。问题是我不能使用子列表,但是(!!)使用列表作为参数。那么我该怎么写呢 编辑: 我分别编写了过滤条件,虽然有效,但问题仍然是一样的: findGood :: [String] -> String -> [String] -> S

我是Haskell的新手,尝试实现以下目标:

filter (((!!) subList (fromJust (elemIndex String [String]))) == String) [[string]]
我用它们的类型替换了名称,以便于阅读。问题是我不能使用子列表,但是(!!)使用列表作为参数。那么我该怎么写呢

编辑:

我分别编写了过滤条件,虽然有效,但问题仍然是一样的:

findGood :: [String] -> String -> [String] -> String -> Bool
但是我仍然需要填写所有的值,尽管第一个[String]是子列表。可以输入所有其他值

编辑:

我解决了它,我需要做的是把[String]放在最后,然后我可以把它留在过滤器中

所以


这就是我想要的。(不需要D)

考虑到您想要比较货币并检查
money>500
,将其存储为
Int
而不是
字符串更为合理。此外,我要说的是,将每个条目存储为元组并拥有元组列表比使用列表列表更有意义(这也是money的Int实现所必需的,因为您不能拥有不同类型列表的列表)

因此,表的类型应该是
[(String,Int)]

filter
遍历列表并根据条件检查每个元素。在这种情况下,条件是如此简单,我不会费心让它成为自己的函数(除非你需要在很多地方重用它)

当给定一对类型
(String,Int)
时,我们只想检查第二个值是否大于500。因此,条件就是
snd row>500
,其中row是表示表中一行的元组

这就给我们留下了:
filter(\row->snd row>500)表


[(“Geoff”,600),(“Bill”,700),(“Bill Jr.”,10)]上进行测试。
这会使
[(“Geoff,600),(“Bill”,700)]
达到预期效果。

我的猜测是,如果您取出要过滤的函数并单独编写,这将变得更容易。但是,如果你给我们一些输入和输出的例子,你会更容易理解你在做什么。如果你能用文字解释一下你在这里试图做什么,那会很有帮助。请不要发布一些无效的代码片段,先解释一下你的目标是什么。你想用这个
过滤器解决什么问题?
?我有一个表,它是字符串列表的列表。表的顶部有名称。例如,我只想显示money大于500的所有行,代码会搜索money在最上面列表中的位置,然后检查每一行上的值是否大于500,如果不大于500,则不显示该行,因此对于每个“子列表”,我想检查某个索引上的一个单词是否等于另一个单词,但是为了检查我需要子列表谢谢,对于所描述的场景它确实可以工作,但是我需要一个更抽象问题的解决方案。具体说明我在第二次编辑中所做的。@BaasBartMans不客气,下次如果您在问题中描述抽象问题,可能会有所帮助。如果他们不知道问题出在哪里,没有人能帮助你。
findGood :: String -> [String] -> String -> [String] -> Bool
            filter (findGood a b c) [[String]]