2017-02-13 27 views
0

我必須編寫兩個函數:「查找」和「刪除」。我需要使用它們來搜索元組列表(對),並將每對中的第一個元素與String匹配。如果元素與String匹配,則「find」函數應該輸出該對中的第二個元素,「delete」函數應該從列表中刪除該對。如何查找和/或刪除哈斯克爾元組列表中的元素

我不確定如何遞歸和搜索Haskell中的列表,我該如何開始編寫這些函數?

+0

你不在Haskell中迭代,你遞歸。 - 這是所有關於Haskell的書籍/教程都很好的基本內容,你在提問之前先閱讀其中的一些內容?當你做出一些嘗試並遇到一些具體問題時,你可以在這裏問。 – leftaroundabout

+2

有http://learnyouahaskell.com/和http://haskellbook.com/ – Reactormonk

回答

2

Lists在Haskell中有一些內置的函數使得這更容易。要做到這一點的方法之一,是使用filter功能:

find :: String -> [(String, a)] -> a 
find y xs = snd . head $ filter (((==) y) . fst) xs 

delete :: String -> [(String, a)] -> [(String,a)] 
delete y xs = filter (not . ((==) y) . fst) xs 

filter需要斷言功能(這是String -> Bool類型的搜索功能)和一個列表,並返回所有滿足該列表的元素謂詞。因此,對於刪除,我們只是要求我們列表中的所有元素都不是我們正在尋找的元素。對於查找,我們要求我們列表中的所有元素匹配,然後獲取列表第一個結果的snd元素。

公平的警告,因爲這裏find使用head,如果你是元素不在列表中,它會拋出一個異常,如果有多個匹配的結果,它將返回第一個。