im试图创建一个简单的c lisp程序,该程序可以查找并替换符号串中的符号。我得到一个错误,说我给函数的参数太少了。
(defun findandreplace (x y z)
(if (eq 'x (first '(z))) 'y (first '(z)))
(findandreplace (rest '(z))))
(print (findandreplace 'x 'y '(x y x y z z x z)))
您的代码中有一些错误。
-
您使用常量文字。例如,
'(z)
从字面上计算为(z)
,符号保持不变,与绑定z
无关。在CL中用一个变量的内容创建一个列表是用基元cons
完成的,而list
肯定会使用cons
来创建一个所有参数的正确列表。例如CCD_ 7。如果目的是使用文字,我就无法理解其中的逻辑。(first '(z))
可以简化为'z
-
第一个
if
是死代码。对代码评估为y
或z
,但该值被丢弃,因为(findandreplace (rest '(z)))
总是紧接着评估。你可能应该确保每一个结果都处于尾部位置。体是CCD_ 14的一大表达。 -
递归调用
(findandreplace (rest '(z)))
只提供一个参数,而defun
有3个必需参数。这就是您的错误来源。 -
由于变量名称很模糊,所以不容易猜测要搜索的
olditem
、newitem
和数据是什么。模仿替代者命名的论点会更好