Кажется, я не могу понять, как делать рекурсию по списку списков в 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--
Я пробовал несколько разных способов, но, похоже, не могу этого понять - я все еще довольно неопытен в Haskell, поэтому, возможно, есть что-то очевидное, что мне не хватает. Помощь будет принята с благодарностью, спасибо.