交换加上减号和后退

时间:2013-07-30 09:09:48

标签: scala

这几乎适用于任何语言,但因为我正在学习scala而且我的编程是scala ...

我正在学习函数式编程并且有一个等式,我需要经过一系列数字并在正负数前后交替。我一直在使用程序类型函数来做,但是想知道是否有人能想出更好的方法吗?

var s = 1;

def sign : Double =
{       
    if(s == 1)
        s = -1;
    else if(s == -1)
        s = 1;

    return s;
}

由于

附录:

我已经改为这个,因为它更简洁:

var s = -1;

def sign : Int =
{       
    s *= -1;
    return s;
}

1 个答案:

答案 0 :(得分:3)

你正在返回一个你正在改变的值 ,这看起来不是一个好主意乍一看。我会在这里寻求纯粹的功能,以避免愚蠢的错误等。

现在,我不太确定你在这里要做什么。你想翻转标志吗? 如果是这样,那么方法就是......琐碎的:

scala> def flipSign(d : Double) = -d
flipSign: (d: Double)Double

scala> flipSign(3)
res3: Double = -3.0

scala> flipSign(-11)
res4: Double = 11.0

如果您正在尝试确定符号(-1表示负数,1表示正数,0表示,嗯,零),则:

scala> def sign(d : Double) = {
     |     d match {
     |     case x if x > 0 => 1
     |     case x if x < 0 => -1
     |     case _ => 0
     |     }
     | }
sign: (d: Double)Int

scala> sign(-3)
res0: Int = -1

scala> sign(212)
res1: Int = 1

scala> sign(0)
res2: Int = 0

<强> [编辑]

正如@senia在评论中注意到的那样,sign也可以有一个非常简单的实现:

def sign(d : Double) = d compareTo 0