我有这个功能,我需要为我的作业建立。
此函数返回所有输入句子中所有符号(无重复)的列表。句子和符号的类型如下:
-- Symbols are strings (a negative sign as the first character represents a negated symbol)
type Symbol = String
-- Sentence = Statements. This is a list of a list of symbols
type Sentence = [[Symbol]]
我尝试过列表理解和递归,但我不知道如何访问列表中的列表。此外,您不需要任何重复,为此我使用nub函数:
getSymbols :: [Sentence] -> [Symbol]
getSymbols stmts = nub [ x | [x: xs] <- stmts ]
Input: getSymbols [["A"], ["B","C"], ["C"]]
Return: ["A", "B", "C"]
真的很感激一些帮助!
答案 0 :(得分:2)
尝试调整类似
的内容[ 1000 + x | xs <- [[1,2],[3,4]] , x <- xs ]
答案 1 :(得分:1)
递归地,您可以定义类似
的连接conc [] = []
conc (x:xs) = x ++ (conc xs) -- ++ concatenates two lists
您的getSymbols
变为
getSymbols sentence = nub . conc $ sentence
关于:
getSymbols :: [Sentence] -> [Symbol]
你确定要在那里列出一系列句子吗?您似乎只尝试使用一个句子,尤其是在查看示例输入和输入时。输出。如果你想使用句子列表,那么你可以conc
两次将所有符号带到同一级别。
getSymbols' :: [Sentence] -> [Symbol]
getSymbols' sentences = nub . conc . conc $ sentences