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)不是数字".任何想法可能是什么问题?
符号可以称为函数.因此,您的代码就是这样:
(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)