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
“提取”是从左到右处理的,因此,当您尝试获取的值时a,b 尚未定义。
列表理解只是以下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)