Haskell 为理解中的变量赋值

Haskell assigning value to a variable inside a comprehension

我在进行以下练习时遇到了一些问题:

我应该编写一个包含 3 个数字的函数,x y n,x 和 y 分别是列表推导式的下界和上界,n 是推式式推导式将具有的分区数。

例如:

λ> partition 10 20 4
[10.0, 12.5, 15.0, 17.5, 20.0]

我所做的如下:

partition :: Double -> Double -> Double -> [Double]
partition x y n = [a+b | b = (y-x) / n ,  a -> [x,b..y]]

我不明白为什么我不能在理解中定义 b 变量的值,因为当我尝试 运行 它时,我收到以下错误消息:

parse error on input `='

注意:这应该是初学者练习,应该有一个简单的解决方案

什么变量?一切都是不可变的:)

你想要的是一个let表达式:

partition x y n = [let b = (y-x)/n in a+b | a <- [x,b..y]]

还要注意箭头的方向:它来自指向 a 的列表表达式,而不是相反。

将公共子表达式从理解中移开看起来更自然:

partition x y n = let b = (y-x)/n in [a+b | a <- [x,b..y]]

您只需要使用 let 关键字:

partition x y n = [a+b | let b = (y-x)/n ,  a <- [x,x+b..y]]

然后你可以根据需要使用b:

λ partition 10 20 4
[12.5,15.0,17.5,20.0,22.5]