CSES - Laskutoimitus

Lisp-kielessä laskutoimitus annetaan sulkulausekkeena, jossa ensin on laskuoperaattori ja sen jälkeen yksi tai useampi lauseke. Esimerkiksi lauseke (+ 5 (* 3 2) 7) antaa tuloksen 18.

Tehtäväsi on toteuttaa koodi, joka laskee Lisp-tyylisen laskulausekkeen arvon. Voit olettaa, että lausekkeen pituus on enintään 1000 merkkiä, jokainen operaattori on + tai * ja jokainen laskennan aikana esiintyvä luku on välillä 0 \dots 10^{18}.

Toteuta tiedostoon lisp.py funktio eval, joka antaa lausekkeen arvon.

def eval(s):
    # TODO

if __name__ == "__main__":
    print(eval("(+ 1 2 3 4 5)")) # 15
    print(eval("(+ 5 (* 3 2) 7)")) # 18
    print(eval("(* (+ (+ 1 2) 3) (+ (* 4 5) 6 2))")) # 168
    print(eval("(+ 123 456)")) # 579