2014年11月26日水曜日

scalaスケーラブルプログラミング P287

数式整形クラスの説明が最後にあった

case BinOp(op,left,right) => 
 val opRec =precedens(op)
 val l= format(left,opPrec)
 val r=format(right,opPrec+1)
 val oper =l beside elem(" "+op" ") beside r
 if (enclPrec <= opPrec) oper
 else elem("(") beside oper beside elem(")")

BinOp(”-”、Var("a"),BinOp("-",Var("b"),Var("c")))
がa-(b-c)となる。

rのほうはopPrec+1となっている理由が説明されているが、ちょっとみただけではわからない。
そこで、例によって丁寧にゆっくりたどってみると。。。

l=format(Val("a"),5) r=format(BinOp("-",Var("b"),Var("c")),5+1)
となる

BinOp("-",Var("b"),Var("c"))は
l=format(Val("b"),5)  r=format(Val("c"),5+1)
Oper= b -c
enclPrec=5+1 opPrec=5なので
elseのほうになり、(b-c)
確かにそうなることが確認はできる。。でも、なんかすっきりしない。

左側は当然優先だから、+1しなくてもいいけど、右側は優先したいとき、はっきりわかるように+1とするという とらえ方でいいのだろうか?

0 件のコメント:

コメントを投稿