Arithmetic evaluation: Difference between revisions
Content added Content deleted
(add mildly cheeky E example) |
(CL bugfixes and better error handling) |
||
Line 858:
(defun group-parentheses (tokens &optional (delimited nil))
(do ((new-tokens '()))
((endp tokens
(when delimited
(cerror "Insert it." "Expected right parenthesis."))
(let ((token (pop tokens)))
(case token
Line 867 ⟶ 870:
tokens remaining-tokens)))
((:rparen)
(
(cerror "Ignore it." "Unexpected right parenthesis.")
▲ (return (values (nreverse new-tokens) tokens)))
(return (values (nreverse new-tokens) tokens))))
(otherwise
(push token new-tokens))))))
Line 874 ⟶ 878:
(defun group-operations (expression)
(flet ((gop (exp) (group-operations exp)))
(if
(destructuring-bind (A
((not xp) (gop A))
(t (
(if
(gop (list*
(gop (list* (list A x B) y C others))))))))))
(defun evaluate-expression (expression)
|