An interesting lisp program. It calculates postfix operations. See if you have better solutions.
(defun pfeval (l) ; takes a list containing a postfix expression ; returns the value of that expression. ; finally test (pfeval '(16 2 3 ^ / 4 5 * + 16 3 * -)) (cond ((and (numberp (car l)) (null (cdr l))) l) ((act-calculate nil l)))) (defun act-calculate (st exp) ; takes a stack and a postfix expression ; return the actual evaluation (cond ((null exp) st) ((numberp (car exp)) (act-calculate (cons (car exp) st ) (cdr exp))) ((equal (car exp) '^) (act-calculate (cons (expt (car (cdr st)) (car st) ) (cddr st)) (cdr exp))) (t (act-calculate (cons (eval (cons (car exp) (cons (car (cdr st)) (cons (car st) nil)))) (cddr st)) (cdr exp)) ))) |