CLisp错误:"(x)不是数字"

dam*_*ndd 0 lisp clisp common-lisp infix-notation infix-operator

这是我的函数,它应该为*和+操作实现中缀评估.

(defun calculate(l)
    (cond
        ((eql (cadr l) '+) (+ (car l) (cddr l)))
        ((eql (cadr l) '*) (- (car l) (cddr l)))
    )
)
Run Code Online (Sandbox Code Playgroud)

当我用列表'(3 + 4)运行它时,它给出了一个错误,说"(4)不是数字".任何想法可能是什么问题?

Rai*_*wig 5

符号可以称为函数.因此,您的代码就是这样:

(defun calculate (l)
  (funcall (second l) (first l) (third l)))
Run Code Online (Sandbox Code Playgroud)

要么

(defun calculate (l)
  (destructuring-bind (arg1 op arg2)
      l
    (funcall op arg1 arg2)))
Run Code Online (Sandbox Code Playgroud)

例:

CL-USER 77 > (calculate '(20 + 30))
50
Run Code Online (Sandbox Code Playgroud)