定义数据类型以表示嵌套的字符串列表

时间:2017-08-25 06:56:38

标签: haskell

我刚刚开始学习haskell,我发现自己要求尝试定义数据类型以表示String的列表列表。这听起来有点令人困惑,但这基本上是这种形式的数据类型:

[["abc", "def", "ghi"], ["abc", "def", "ghi"], ["abc", "def", "ghi"]]

每个内部列表的长度始终为3,但内部的字符串可以是大于1的任意长度。

我试过了:

data MyType = Lists [String] | List [MyType]

但我不确定它是否正确,或者我不知道如何使用它。如果它是正确的,我将如何构建这些单词的列表列表,或者如果它不正确,那么定义这种类型的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

您只需要定义类型,数据用于其他用户:

type MyType = [(String, String, String)]

检查answer 如果您确实想要创建新的代数数据类型,例如:

data MyType = Tup3 String String String | List [MyType] deriving Show

Live example

答案 1 :(得分:1)

  

内部列表的长度始终为3

您正在寻找的数据结构是元组。它与列表的根本区别在于元组的类型取决于其中的元素数量。你可以阅读它here

它看起来像:

[("abc", "def", "ghi"), ("abc", "def", "ghi"), ("abc", "def", "ghi")]

此结构的类型为[(String, String, String)]

因此,MyType将类似于:

data MyType = Lists (String, String, String) | List [MyType]

答案 2 :(得分:0)

如果你只想要一种其元素为“三元素列表”的列表,那么你可以使用三元组列表(三元素的元组)。

type MyType = [(String, String, String)]

例如,[][("a","b","c")][("abc", "def", "ghi"), ("abc", "def", "ghi"), ("abc", "def", "ghi")]MyType的居民。

评论旁边:正如其他的陈述所说,如果列表的长度是固定的,那么它不是你正在谈论的列表,而是一个向量或元组。