(import (scheme base) (scheme read) (scheme write) ) (define (string-to-number c) (- (char->integer c) (char->integer #\0))) (define (eval-string s) (let loop ( (chars (string->list s)) (r 0) (o 0) (l 0) ) (cond ((null? chars) (if (= l 0) (+ r o) (* r o))) ((or (char=? (car chars) #\*) (char=? (car chars) #\+)) (let ( (new-r (if (= l 0) (+ r o) (* r o))) (new-l (if (char=? (car chars) #\*) 0 1)) ) (loop (cdr chars) new-r 0 new-l))) (else (let ( (new-o (+ (* o 10) (string-to-number (car chars)))) ) (loop (cdr chars) r new-o l)))))) (define s (read-line)) (display (eval-string s)) (newline)