Rule 式の評価順 その2
その2です。
HerbertOnlineJudgeの場合、式の内側、つまりカッコの内側から評価されて行きます。
今回は前回の記事に少しのプラスアルファを加えます。
b(c(X)r)
となったとき、
"r"はどう評価されるのか、例を追いながら見ていきましょう。
a(X):XXXX // プロシージャ定義部分 b(X):XX c(X):X a(b(c(sss)r)lll) // 式実行部分
*式の下線部が現在評価している評価部分になります。
- まずは式の内側"a(b(c(sss)r)lll)"が評価され
- これはc(X):Xなので、
- "a(b(sssr)lll)"となり
- 次にカッコの内側"a(b(sssr)lll)"が評価されて
- b(X):XXなので
- "a(sssrsssrlll)"となります
- 最後に一番外側、最後のカッコを評価するので
- "a(sssrsssrlll)"となって
- a(X):XXXXなので
- "sssrsssrlllsssrsssrlllsssrsssrlllsssrsssrlll"となり、
- 無事全部の式が評価され終わりました。
式部分だけ抜き出して羅列するとこうなります。
a(b(c(sss)r)lll) a(b(sssr)lll) a(sssrsssrlll) sssrsssrlllsssrsssrlllsssrsssrlllsssrsssrlll