【发布时间】:2021-03-14 18:34:24
【问题描述】:
我是 lisp 编程的新手,我正在尝试比较一个变量,比如说 op 与字符 +、-、*、/。但在所有方面我写的正确结果都没有出现。我该如何重写以下代码:
(defun evaluate(op o1 o2)
(cond
( (string= op `+) (+ o1 o2))
( (string= op `-) (- o1 o2))
( (string= op `*) (* o1 o2))
( (string= op `/) (/ o1 o2))
)
)
输入是:
(print (calculate `(- * + 4 3 2 5)))
所以我在我的函数中加入了操作符字符。不要介意数字。 确定这里是计算函数。
(defun calculate (l)
(if (and (numberp (car l)) (not (null l)) )
(car l)
( evaluate (car l) (calculate (cdr l) )
(calculate (cdr l) ) )
)
)
【问题讨论】:
-
您只用两个参数调用
evaluate。它需要 3 个参数。 -
evaluate写对了,问题出在calculate。 -
然而,你不应该使用
string=,使用eql。您的输入都不是字符串,它们是符号和数字。
标签: comparison character lisp common-lisp clisp