2016-04-26 10 views
-1

この関数は、算術式を表す文字列を返すことになっています。式を文字列に変換する

 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(ムル(NUM(2.0)、ムル(、テンキー(5.0)(NUM(3.0)を追加)、テンキー(-10.0))):ここで

は、私が実行されたテストは、 )

それはそれは私の間違っているテストまたは関数自体だ場合、私は知らない「のNum」

を見つけることができないと言います。

私は適切なトラックにいますか?

+2

失敗したテストは何ですか?そしてコード全体を投稿できますか? –

+0

失敗したテストコードを送信してください。 – marcospereira

+0

「Num」、「Add」などの定義なしではわかりません。「Numを見つけることができません」と表示されている場合は、おそらく「Num」が定義されていません(またはタイプが間違っている) –

答えて

0
case Num(a) => "a" 

これは間違っています。あなたは文字列 "a"を印刷しているだけです。おそらくa.toStringが必要です

+0

それでも同じエラーが発生します – rocketman

+0

Numのコンストラクタは何ですか?あなたはIntを取るが、浮動小数点を渡すケースクラスを作成したかもしれませんか? – Ren