Es vol tenir un mòdul per avaluar expressions amb operacions: , , , . Per fer-ho codificarem les expressions amb la gramàtica següent:
expr ::= (:val int) | (:add expr expr) | (:sub expr expr) | (:mul expr expr) | (:div expr expr)
Així, l’expressió quedaria codificada com:
(:add (:val 3) (:div (:val 4) (:val 2)))
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