如何使用自定义列表实现编写嵌套列表列表?

时间:2016-05-20 16:58:33

标签: list haskell nested

我想知道我对列表的定义是否比常规实现的能力低。我在创建具有以下定义的列表列表时遇到问题:

data List a =
  Nil
  | Cons a (List a)
  deriving (Eq, Ord, Show)

我没有看到如何使用我对list的定义来创建像[[2],[3]]这样的列表。

嵌套列表的最简单实例只是[[]],我认为我可以使用Cons Nil Nil重新创建。嵌套列表的第二个最简单的实例是[[1]]。这是Cons (Cons 1 Nil) Nil afaics。

但是,就像我说的那样,看不出如何使用上面的定义创建列表[[2],[3]]。我该怎么做? (应该可以,因为练习要求我为上面的列表定义创建一个monad实例)。

1 个答案:

答案 0 :(得分:3)

我们首先考虑一下,您将如何表达[x,y]

Cons x (Cons y Nil)

现在放入x = [2]

Cons (Cons 2 Nil) (Cons y Nil)

y = [3]

Cons (Cons 2 Nil) (Cons (Cons 3 Nil) Nil)