公共Lisp:给函数的参数太少,但找不到问题



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)))

您的代码中有一些错误。

  1. 您使用常量文字。例如,'(z)从字面上计算为(z),符号保持不变,与绑定z无关。在CL中用一个变量的内容创建一个列表是用基元cons完成的,而list肯定会使用cons来创建一个所有参数的正确列表。例如CCD_ 7。如果目的是使用文字,我就无法理解其中的逻辑。(first '(z))可以简化为'z

  2. 第一个if是死代码。对代码评估为yz,但该值被丢弃,因为(findandreplace (rest '(z)))总是紧接着评估。你可能应该确保每一个结果都处于尾部位置。体是CCD_ 14的一大表达。

  3. 递归调用(findandreplace (rest '(z)))只提供一个参数,而defun有3个必需参数。这就是您的错误来源。

  4. 由于变量名称很模糊,所以不容易猜测要搜索的olditemnewitem和数据是什么。模仿替代者命名的论点会更好

相关内容

  • 没有找到相关文章

最新更新