具有多个参数的列表理解

Pan*_*Pan 0 haskell functional-programming list-comprehension

为什么我不能在Haskell中这样做?

[a * b | a <- [0..b], b <- [0..10]]

error: Variable not in scope: b
Run Code Online (Sandbox Code Playgroud)

如果使用列表理解是不可能的?还是我可以做些什么来达到目标​​?

che*_*ner 11

“提取”是从左到右处理的,因此,当您尝试获取的值时ab 尚未定义。

列表理解只是以下monadic代码的语法糖,这使您更容易了解为什么b还不在范围内。

-- [a * b | a <- [0..b], b <- [0..10]]
[0..b] >>= \a -> [0..10] >>= \b -> return (a * b)
Run Code Online (Sandbox Code Playgroud)

将其翻转,并b进入范围:

-- [a * b | b <- [0..10], a <- [0..b]]
[0..10] >>= \b -> [0..b] >>= \a -> return (a*b)
Run Code Online (Sandbox Code Playgroud)