如何定义一个评估序列[(0,0),(1,0),(2,0),(3,0)等]和[(0,0),(0,1)的列表),(0,2),(0,3)等]

时间:2015-03-26 12:00:20

标签: haskell

我是Haskell的初学者,我想知道如何定义两个列表,其中一个列表的计算结果为[(0,0),(1,0),(2,0),(3,0) ,等等]和另一个到[(0,0),(0,1),(0,2),(0,3)等]?我有多次尝试,但每次只打印出第一个序列而不打印第二个序列。如果有人能告诉我这将是多么伟大。感谢

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令定义无限的零列表:

[0, 0 ..]

你可以用类似的方式定义一个从0开始的无限整数列表:

[0, 1 ..]

功能zip :: [a] -> [b] -> [(a, b)]有两个列表和'拉链'他们进入元组列表。因此,如果我们将zip与上面的列表符号结合起来,我们可以实现您的要求:

zip [0, 0 ..] [0, 1 ..]

你可以在ghci中试试这个:

> take 4 $ zip [0, 0 ..] [0, 1 ..]
[(0, 0), (0, 1), (0, 2), (0, 3)]
> take 4 $ zip [0, 1 ..] [0, 0 ..]
[(0, 0), (1, 0), (2, 0), (3, 0)]

使用list-comprehensions

[ (i,0) | i <- [0..] ]

[ (0,i) | i <- [0..] ]