**GNU Emacs Calc 2.02 Manual**

### 3.7.54 Rewrites Tutorial Exercise 3

He got an infinite loop. First, Calc did as expected and rewrote
``2 + 3 x'` to ``f(2, 3, x)'`. Then it looked for ways to
apply the rule again, and found that ``f(2, 3, x)'` looks like
``a + b x'` with ``a = 0'` and ``b = 1'`, so it rewrote to
``f(0, 1, f(2, 3, x))'`. It then wrapped another ``f(0, 1, ...)'`
around that, and so on, ad infinitum. Joe should have used `M-1 a r`
to make sure the rule applied only once.

(Actually, even the first step didn't work as he expected. What Calc
really gives for `M-1 a r` in this situation is ``f(3 x, 1, 2)'`,
treating 2 as the "variable," and ``3 x'` as a constant being added
to it. While this may seem odd, it's just as valid a solution as the
"obvious" one. One way to fix this would be to add the condition
``:: variable(x)'` to the rule, to make sure the thing that matches
``x'` is indeed a variable, or to change ``x'` to ``quote(x)'`
on the lefthand side, so that the rule matches the actual variable
``x'` rather than letting ``x'` stand for something else.)