Comment Comment by pooyamo The LOOP solution could be written using DOLIST or DO forms too (likewise built-in): (defun calculate (instructions) (let ((result 0)) (dolist (e instructions result) (destructuring-bind (operator operand) e (setf result (case operator (add (+ result operand)) (multiply (* result operand)) (subtract (- result operand)))))))) (defun calculate (instructions) (do ((result 0)) ((null instructions) result) (destructuring-bind (operator operand) (pop instructions) (setf result (case operator (add (+ result operand)) (multiply (* result operand)) (subtract (- result operand))))))) parent pooyamo 3 months ago