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