代入して結果を計算する(ev)

subst ではなく ev (evaluate) 関数を使うと、評価の順番を制御できます。ev は、指定された代入ルールを適用した後に式全体を評価します。 (google AI さんに教えてもらいました。)

書式としては ev(評価したい式, 代入ルール) という順番になります。(subst とは順番が「逆」)

subst と比べると、 ev のほうが私の「代入」という感覚に近く感じました。(あくまで土基の主観です。)

記号は適切ではない(私的なものに過ぎない)ですが:

B()が複雑な場合、ev(B(2), S) は S の環境下で B(2) を展開・評価しますが、b2:B(2); ev(b2, S) のようにb2という変数に途中下車すると 標準環境で展開しきった b2 に対して後から S を適用する ため、特に B(x) が条件分岐や評価制御命令を含む場合に結果が異なります。 (わたしの計算例ではsubst(S,B(2)) ではわたしが期待した結果が出ました。 違いがあることには注意が必要かもしれません。)