mul (s ?x) (s ?y)) (add (s ?x) (mul (s ?x) (sub (s ?y) (s (0)))))
&lt;&gt; (mul (s ?x) (s (0))) (s ?x)
&lt;&gt; (mul (s (0)) (s ?y)) (s ?y)
&lt;&gt; (mul (s ?x) (0)) (0)
&lt;&gt; (mul (0) (s ?x)) (0)
</pre>

<p>To convert from prefix notation to infix: </p>
<pre>
&lt;&gt; (?x + ?y) (add ?x ?y)
&lt;&gt; (?x - ?y) (sub ?x ?y)
&lt;&gt; (?x * ?y) (mul ?x ?y)
</pre>

<p>Altogether, we have enough parts to implement factorial: </p>
<pre>
&lt;&gt; (factorial (s (0))) ((s (0)))
&lt;&gt; (factorial (s ?x)) (((s ?x) 