下面的代码不断引发以下错误:

 caught ERROR:

illegal function call

     (LET ((SOLUTION 'NIL) (FIRST 0) (SECOND 0))
       (DOLIST (EL LST)
         (IF (NUMBERP EL)
             (PUSH EL SOLUTION)
             ((SETF #) (SETF #) (PUSH # SOLUTION))))
       (CAR SOLUTION))

谁能看到原因?从语法上讲,我看不到任何问题。
注意:我正在使用sbcl。

我的代码:
(defun evalpostfix (lst)
  (let ((solution '())
        (first 0)
        (second 0))
    (dolist (el lst)
      (if (numberp el) ;if
          (push el solution) ;then
          ((setf second (pop solution)) ;else
             (setf first (pop solution))
             (push (funcall el first second) solution))))
    (car solution)))

最佳答案

((setf second (pop solution))-两个开括号?为什么?另一个形式的IF的语法是:

(if test-form then-form else-form)

表单不能以两个括号开头-只有一个异常(exception):((lambda (x) (+ x 1)) 2)

如果要分组多个表达式,请使用(progn a b c ... z)之类的东西。

关于compiler-errors - Lisp非法函数调用,,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16002497/

10-11 21:58