首页 > 解决方案 > 回答这个 Haskell 表达式

问题描述

下面的表达式[y | x <- [1..3], y <- [x..x*2]]产生答案[1, 2, 2, 3, 4, 3, 4, 5, 6]

有人可以解释一下达到这个答案所涉及的步骤吗?

标签: haskellexpressionlist-comprehension

解决方案


它就像一个 foreach 循环一样工作,所以

foreach (x in [1..3]) {
  foreach (y in [x .. x * 2]) {
    yield y;
  }
}

首先 x 是 1,所以 [1 .. 2] 中的 y

那么 x 是 2,所以 y 在 [2 .. 4]

那么 x 是 3,所以 y 在 [3 .. 6]

将这些结果连接在一起,即可得到最终结果。


推荐阅读