CLisp错误:“(x)不是数字”

时间:2015-08-10 18:50:30

标签: lisp common-lisp infix-notation clisp infix-operator

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

y=.8

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

2 个答案:

答案 0 :(得分:5)

符号可以作为函数调用。因此,您的代码就是这样:

(defun calculate (l)
  (funcall (second l) (first l) (third l)))

(defun calculate (l)
  (destructuring-bind (arg1 op arg2)
      l
    (funcall op arg1 arg2)))

示例:

CL-USER 77 > (calculate '(20 + 30))
50

答案 1 :(得分:3)

(cddr l)的部分应为(caddr l)。您必须访问列表的第一个元素,而不是列表。代码应该是:

(defun calculate(l)
    (cond
        ((eql (cadr l) '+) (+ (car l) (caddr l)))
        ((eql (cadr l) '*) (- (car l) (caddr l)))
    )
)