我刚刚开始学习haskell,我发现自己要求尝试定义数据类型以表示String
的列表列表。这听起来有点令人困惑,但这基本上是这种形式的数据类型:
[["abc", "def", "ghi"], ["abc", "def", "ghi"], ["abc", "def", "ghi"]]
每个内部列表的长度始终为3,但内部的字符串可以是大于1的任意长度。
我试过了:
data MyType = Lists [String] | List [MyType]
但我不确定它是否正确,或者我不知道如何使用它。如果它是正确的,我将如何构建这些单词的列表列表,或者如果它不正确,那么定义这种类型的正确方法是什么?
答案 0 :(得分:2)
您只需要定义类型,数据用于其他用户:
type MyType = [(String, String, String)]
检查answer 如果您确实想要创建新的代数数据类型,例如:
data MyType = Tup3 String String String | List [MyType] deriving Show
答案 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
的居民。
评论旁边:正如其他的陈述所说,如果列表的长度是固定的,那么它不是你正在谈论的列表,而是一个向量或元组。