我似乎無法包裝我的頭如何通過Haskell列表列表進行遞歸。這是我的問題:Haskell - 通過列表列表遞歸?
type Symbol = String
type Sentence = [[Symbol]]
getSymbols :: [Sentence] -> [Symbol]
getSymbols [[]] = []
getSymbols ((sym:stmt):(stmts))
| stmt == [] = getSymbols stmts
| sym `elem` stmt = getSymbols ((stmt):(stmts))
| otherwise = sym : getSymbols ((stmt):(stmts))
我想要返回給定句子中找到的所有符號列表中沒有重複出現,例如,
getSymbols [["A","B","C"],["D","A"],["E","B","C"]]
將返回:
["A","B","C","D","E"] --order does not matter--
我一直在嘗試一些不同的方法,但似乎仍不能得到 - 我現在仍然在哈斯克爾相當原始,所以也許有一些明顯的我我錯過了。幫助將不勝感激,謝謝。
你可能會嘗試將問題分解爲更容易的子問題?例如。首先創建一個包含所有內容的大列表,然後刪除重複項。那麼你的問題的答案就是編寫這些簡單的函數。 – gallais
@gallais是否需要我編寫更多的函數,還是可以在單個函數中完成?因爲我只想用一個函數來解決問題 – willrobertshaw
@willrobertshaw我不認爲這是個好主意。函數式編程的核心是組成函數。您越早習慣編寫小型可組合函數越好。想想什麼是更通用的小型樂高積木或玩具車? – epsilonhalbe