2014-04-30 12 views
0

我在編寫一個代碼,它接受dictionaryarray of keys並檢查字典並查看該字符是否在字典中,如果不在字典中有離開它,否則發送回那些鍵和值,其關鍵字是傳遞字典並搜索一組值並在haskell中返回另一個字典

我穿,但我得到的代碼太多錯誤的字典詞典

let x = check dict key 
putStrLn $ show (x) 

check :: Eq k => [(k, v)] ->[k] -> [(k,v)] 
check dict words = [findVal word dict | word <- words] 

findVal :: (Eq k) => k -> [(k,v)] -> [(k, v)] 
findVal key xs = foldr (\(k,v) acc -> case key == k of True -> (k,v) 
                 False -> acc) xs 

的錯誤是數據類型2個功能,而且這個cse也是一個錯誤

+0

你得到了什麼錯誤? – mhwombat

回答

2

對於words中的每個單詞,您想要在dict中找到它們的第一部分等於該單詞的所有條目。

這可以直接與列表理解使用wordsdict作爲發電機來實現,目前的字是對的第一部分作爲後衛:

check dict words = [ e | key <- words, [email protected](k, _) <- dict, key == k ] 

下面的例子表明,雙發電機列表理解是如何工作的:

> [(a, b) | a <- "abc", b <- [1..5]] 
[('a',1),('a',2),('a',3),('a',4),('a',5),('b',1),('b',2),('b',3),('b',4),('b',5),('c',1),('c',2),('c',3),('c',4),('c',5)] 

並顯示它爲什麼正是你所需要的。

1
\(k,v) acc -> case key == k of True -> (k,v) 
           False -> acc 

這個函數是什麼類型的?

foldr (...) xs 

foldr需要多少個參數?

相關問題