Haskell为理解中的变量赋值

时间:2015-07-24 16:21:35

标签: list haskell list-comprehension

我在以下练习中遇到了一些问题:

我应该编写一个函数,即3个数字,xyn,x和y分别是列表推导的底部和上限,n是理解所具有的分区数。

E.g:

function getFirstWord(str) {
        let spacePosition = str.indexOf(' ');
        if (spacePosition === -1)
            return str;
        else
            return str.substr(0, spacePosition);
    };

我所做的是以下内容:

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

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

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

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

2 个答案:

答案 0 :(得分:8)

您只需使用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]

答案 1 :(得分:3)

有什么变数?一切都是不可改变的:)

你想要的是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]]