>66
あいにくSchemeしか知らんのでSchemeですまぬ

(define transform-1
 (lambda (head rest)
  (if (null? rest)
    (transform head)
    (case (car rest)
     ((+ -) (list
          (car rest)
          (transform head)
          (transform-1 (cadr rest) (cddr rest))))
     ((* /) (transform-1
          (list
           (car rest)
           (transform head)
           (transform (cadr rest)))
          (cddr rest)))
     (else 'syntax-error))))))

(define transform
 (lambda (expr)
  (if (and (pair? expr) (not (memq (car expr) '(+ - * /))))
    (transform-1 (car expr) (cdr expr))
    expr)))

(define calc
 (lambda (expr)
  (eval (transform expr))))