列表理解输出不是我假设的

  • 本文关键字:假设 输出 列表 haskell
  • 更新时间 :
  • 英文 :


我认为它很简单,就像我大学过去的一篇论文一样,但函数是:

[(x,y) | x <- [0..2], y<-[0,x])

和输出

  [(0,0),(0,0),(1,0), (1,1), (2,0), (2,2)]

(2,0) 让我感到困惑,如果 y 映射到 0 到 x,而 x 等于 1 = (1,1) 会不会

[(0,0),(0,0),(1,0), (1,1), **(2,1)**, (2,2)]

还是因为 y 使用其列表中的所有数字 [0,1],它恢复为 0?

情况

[(x,y) | x <- [0..2], y<-[0,x]]

[0,x]是:

  • [0,0] x=0
  • [0,1] x=1
  • [0,2] x=2

因此,如果您将每一种y与相应的x配对,您将获得:

   [(0,0),(0,0)] -- x = 0
++ [(1,0),(1,1)] -- x = 1
++ [(2,0),(2,2)] -- x = 2

产生您给定的输出


注意:[0,2]的长度为 2,与长度为 3 且包含 1[0..2] 完全不同


案例[(x,y) | x <- [0..2], y<-[0..x]]

这没有什么不同 - [0..x]是:

  • x=0 [0]
  • [0,1] x=1
  • [0,1,2] x=2

如果你把这些y中的每一个都与相应的x配对,你会得到

   [(0,0))]            -- x = 0
++ [(1,0),(1,1)]       -- x = 1
++ [(2,0),(2,1),(2,2)] -- x = 2

然后给你结果

[(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)]

最新更新