2014-11-24 43 views
0

我在列表中列出了一些列表的字符串理解時遇到了一些麻煩。在下面的代碼中,我有一個名爲dictionary的字符串列表(我們可以認爲它是全局的)以及搜索字符串列表,它是輸入。該代碼是在這裏:正在搜索帶有列表的列表的列表

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「]]。 謝謝!

+0

那麼,你的問題到底是什麼? – leftaroundabout 2014-11-24 01:44:57

回答

1

您的問題就在這裏:

... 
    | elem x y = x : search' x ys 
    | otherwise = search' xs ys 

在您所呼叫search'x並與xs第二種情況下,第一種情況。但是xxs有不同的類型 - xsx的列表。

你需要構建迭代是這樣的:

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調用的結果。