List Haskell将值赋给函数中的变量

List Haskell将值赋给函数中的变量,list,haskell,list-comprehension,List,Haskell,List Comprehension,我对以下练习有一些问题: 我应该写一个函数,它是3个数字,xyn,分别是x和y,是列表理解的下限和上限,n是理解将拥有的分区数 例如: 我所做的工作如下: partition :: Double -> Double -> Double -> [Double] partition x y n = [a+b | b = (y-x) / n , a -> [x,b..y]] 我不明白为什么我不能在理解中定义b变量的值,因为当我尝试运行它时,我得到以下错误消息: parse

我对以下练习有一些问题:

我应该写一个函数,它是3个数字,xyn,分别是x和y,是列表理解的下限和上限,n是理解将拥有的分区数

例如:

我所做的工作如下:

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]]

您只需使用
let
关键字:

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

可能
x,b..y
->
x,x+b..y
@chi:这是有道理的,尽管我只是修正了语法,而不是语义。结果不同。哦,我不知道我可以让你理解,谢谢。但是那样的话,列表会上升到y+b(22.5),而不是仅仅上升到20.0,我怎么才能修复它呢?@user3237465我真的不认为这有什么关系。这里的错误是使用
a+b
而不是
a
,与Haskell有趣的枚举规则无关。@Daniel Wagner,是的,我没有看列表的第一个数字和长度。无论如何,像这样对浮点数使用枚举是“不安全的”。
partition x y n = let b = (y-x)/n in [a+b | a <- [x,b..y]]
partition x y n = [a+b | let b = (y-x)/n ,  a <- [x,x+b..y]]
λ partition 10 20 4
[12.5,15.0,17.5,20.0,22.5]