Clojure - Expressions W89172


Statement
 

pdf   zip

thehtml

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ó 3 + 4 / 2 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.

Public test cases
  • 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
    
  • Information
    Author
    Gerard Escudero
    Language
    Catalan
    Official solutions
    Clojure
    User solutions
    Clojure