我对一些列表中的字符串理解列表有点麻烦。在下面的代码中,我有一个名为字典的字符串列表(我们可以将其视为全局用于我们的目的)和一个搜索字符串列表,它是输入。代码在这里:
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
我要做的是搜索双重列表,&#39;词典&#39; /&#39; z&#39;对于列表中的每个字符串&#39; a&#39;然后返回包含该字符串的完整列表。因此字典可能包含[[&#34; b&#34;,&#34; c&#34;],[&#34; d&#34;,&#34; e&#34;],[&# 34; f&#34;,&#34; g&#34;]]并列出&#39; a&#39;可能包含[&#34; b&#34;,&#34; d&#34;]并且我会回来[[&#34; b&#34;,&#34; c&#34;],[& #34; d&#34;&#34; E&#34;]]。 谢谢!
答案 0 :(得分:1)
你的问题在这里:
...
| 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
函数负责查找仅包含x
的所有列表。 search
函数负责迭代列表xs
并连接所有go
次调用的结果。