将表达式转换为字符串

时间:2016-04-26 03:24:55

标签: scala

我编写了这个函数,它应该返回表示算术表达式的字符串。

     import scala.util.parsing.combinator._

object ArithEval extends ArithEvalLike {


def eval (e:Expr):Double = e match {
    case Num(a) => a
    case Exponent(a,b) => Math.pow(eval(a),eval(b))
    case Add(a,b) =>eval(a) + eval(b)
    case Sub(a,b) =>eval(a) - eval(b)
    case Mul(a,b) =>eval(a) * eval(b)
    case Div(a,b) =>eval(a) / eval(b)
   }
}


object ArithPrinter extends ArithPrinterLike {
def print (e: Expr ): String = e match {
    case Num(a) => "a"
    case Exponent(a,b) =>print(a).toString  + "^" + print(b).toString
    case Add(a,b) => print(a).toString  + "+" + print(b).toString
    case Sub(a,b) => print(a).toString  + "-" + print(b).toString
    case Mul(a,b) =>print(a).toString  + "*" + print(b).toString
    case Div(a,b) =>print(a).toString  + "/" + print(b).toString
   }
}

这似乎不正确,因为我的一些测试失败了。

以下是我跑的测试:

scala> ArithPrinter.print(Mul(Num(2.0),Mul(Add(Num(3.0),Num(5.0)),Num(-10.0))))

它说无法找到'Num'

我不知道这是我的测试错误还是函数本身。

我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:0)

case Num(a) => "a"

这看起来不错。您只是打印" a",字符串。你可能想要a.toString