Rule 式の評価順 その2

その2です。

HerbertOnlineJudgeの場合、式の内側、つまりカッコの内側から評価されて行きます。
今回は前回の記事に少しのプラスアルファを加えます。

b(c(X)r)

となったとき、
"r"はどう評価されるのか、例を追いながら見ていきましょう。

a(X):XXXX // プロシージャ定義部分
b(X):XX
c(X):X

a(b(c(sss)r)lll)  // 式実行部分


*式の下線部が現在評価している評価部分になります。
  1. まずは式の内側"a(b(c(sss)r)lll)"が評価され
  2. これはc(X):Xなので、
  3. "a(b(sssr)lll)"となり
  4. 次にカッコの内側"a(b(sssr)lll)"が評価されて
  5. b(X):XXなので
  6. "a(sssrsssrlll)"となります
  7. 最後に一番外側、最後のカッコを評価するので
  8. "a(sssrsssrlll)"となって
  9. a(X):XXXXなので
  10. "sssrsssrlllsssrsssrlllsssrsssrlllsssrsssrlll"となり、
  11. 無事全部の式が評価され終わりました。

式部分だけ抜き出して羅列するとこうなります。

a(b(c(sss)r)lll)
a(b(sssr)lll)
a(sssrsssrlll)
sssrsssrlllsssrsssrlllsssrsssrlllsssrsssrlll