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]
我在进行以下练习时遇到了一些问题:
我应该编写一个包含 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]