Es vol tenir un mòdul per avaluar expressions amb operacions: +, −, *, /. Per fer-ho codificarem les expressions amb la gramàtica següent:
Així, l’expressió 3 + 4 / 2 quedaria codificada com:
Definiu una funció avalua que, donada una "expr", retorni la seva avaluació. En el cas de que es produeixi una divisió per zero, hauria de llançar una excepció "div0" per indicar-ho.
Input
(avalua '(:add (:val 2) (:val 3))) (avalua '(:mul (:add (:val 2) (:val 3)) (:sub (:val 2) (:val 3)))) (avalua '(:add (:div (:val 4) (:val 0)) (:val 3)))
Output
5 -5 div0