下面的代码不断引发以下错误:
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/