我编写了这个函数,它应该返回表示算术表达式的字符串。
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'
我不知道这是我的测试错误还是函数本身。
我是在正确的轨道上吗?
答案 0 :(得分:0)
case Num(a) => "a"
这看起来不错。您只是打印" a",字符串。你可能想要a.toString