我似乎无法包装我的头如何通过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