这是我的代码:

(defun remv(a L)
 (if (null L) nil
      (if (typep (first L) 'list) (cons (remv a (first L)) (remv a (rest L)))
           (if (= a (first L)) (remv a (rest L)) (cons (first L) (remv a (rest  L)))))))

当我称之为:
(remv a '(a (b) a c))

我得到这个错误:
错误:未绑定变量:A
执行时:CCL::廉价评估环境中的进程内侦听器(1)。
键入:转到“继续”,“弹出”以中止,:R以获取可用重新启动的列表。
如果继续:重试获取A的值。
类型:其他选择。
1>
这个函数和数字一起工作,我四处查看了一下,不知道如何修复这个问题。

最佳答案

就在这里:

(remv a '(a (b) a c))

单独的a和同样写的(quote a)之间有很大的区别。第一个是对以符号'a命名的变量的引用,在您的示例中,该变量是未绑定的,而第二个是名为a本身的符号。
如果你的函数应该和数字一起工作,并且你想测试它看它是否成功,给它数字在这里,您传递一个带引号的符号列表作为第二个参数。

关于syntax - 从列表中删除给定元素的LISP函数不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36533189/

10-11 14:33