Haskell - 如何访问列表中的列表

时间:2016-02-03 13:27:18

标签: haskell

我有这个功能,我需要为我的作业建立。

此函数返回所有输入句子中所有符号(无重复)的列表。句子和符号的类型如下:

-- 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"] 

真的很感激一些帮助!

2 个答案:

答案 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