【发布时间】:2018-03-09 12:33:30
【问题描述】:
我是 Haskell 的新手,正在学习列表推导。根据我从示例中看到的内容,我正在尝试在
中执行以下代码[ w :: Integer | x <- [1..10], y <- [1..10], z <- [1..10], w == x*2 + y*2 + z*2, w < 20]
但是,我收到以下错误:
:66:3: 错误:变量不在范围内:w :: Integer
:66:60: 错误:变量不在范围内:w :: Integer
:66:82: 错误:变量不在范围内:w :: Integer
我已经搜索了问题的原因,从this 问题中,问题似乎是 Haskell 不知道变量的类型,但是在我的代码中,我正在定义它(就像我们在做数学),但问题仍然存在,那么这种定义有什么问题,我们该如何解决呢?
请注意,尝试执行这段代码的全部目的只是为了了解如何使用与数学中相同的符号来进行列表理解。
【问题讨论】:
-
w == x*2 + y*2 + z*2没有定义w,但设置了一个涉及(未定义的)w的相等检查。你的意思是let w = x*2 + y*2 + z*2。 (虽然如果您的预期公式是毕达哥拉斯公式,那么您实际上是指let w = x^2 + y^2 + z^2)。
标签: haskell functional-programming