我寫過這個函數,它應該返回表示算術表達式的字符串。將表達式轉換爲字符串
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
}
}
這似乎不正確,因爲我的一些測試失敗。
下面是我跑的測試:
階> ArithPrinter.print(Mul的(民(2.0),穆爾(添加(民(3.0),序號(5.0)),NUM(-10.0))) )
它說,它無法找到「民」
我不知道這是否是我的測試是錯誤的或者功能本身。
我在正確的軌道上嗎?
什麼是失敗的測試?你可以發佈整個代碼嗎? –
發佈失敗的測試代碼。 – marcospereira
我們不能說沒有'Num','Add'等的定義。如果我說「找不到Num」,可能沒有定義Num''或者它是錯誤的類型 –