我在一些字符串理解列表中遇到一些麻烦。在下面的代码中,我有一个称为字典的字符串列表(我们可以考虑将其视为全局),以及一个搜索字符串列表(作为输入)。代码在这里:
simpleSearch :: [String] -> [[String]]
simpleSearch a = [z | z <- dictionary, elem a z]
早些时候,我尝试如上所述创建基于zipWith代码的搜索,但是没有骰子:
search' :: [a] -> [[a]] -> [[a]]
search' _ [] = []
search' [] _ = []
search' (x:xs) (y:ys)
| elem x y = x : search' x ys
| otherwise = search' xs ys
我想做的是在列表“ a”中的每个字符串中搜索双重列表“ dictionary” /“ z”,然后返回包含该字符串的完整列表。因此字典可能包含[[“ b”,“ c”],[“ d”,“ e”],[“ f”,“ g”]]]之类的内容,列表'a'可能包含[“ b”,“ d“],然后我会回来[[” b“,” c“],[” d“,” e“]]。谢谢!
您的问题在这里:
...
| elem x y = x : search' x ys
| otherwise = search' xs ys
在第一种情况下,您使用呼叫search'
,x
在第二种情况下使用xs
。但是x
和xs
具有不同的类型-xs
是的列表x
。
您需要像下面这样构造迭代:
search :: Eq a => [a] -> [[a]] -> [[a]]
search [] _ = []
search (x:xs) ys = (go x ys) ++ search xs ys
go
类型的辅助函数在哪里go :: Eq a => a -> [[a]] -> [[a]]
该go
函数负责查找包含just的所有列表x
。该search
函数负责遍历列表xs
并串联所有go
调用的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句