用于从列表中删除给定元素的LISP函数不起作用

时间:2016-04-10 17:38:15

标签: syntax lisp

这是我的代码:

(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   在进程监听器(1)中执行:CCL :: CHEAP-EVAL-IN-ENVIRONMENT。   键入:GO继续,:POP中止,:R表示可用的重新启动列表。   如果继续:重试获取A的值。   类型:?其他选择。   1>

该功能适用​​于数字,我环顾四周,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

就在这里:

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

a(quote a)之间存在巨大差异,同时也写为'a。第一个是对符号a之后命名的变量的引用,在您的情况下是未绑定的,而第二个是名为a的符号。

如果您的函数应该使用数字并且您想测试它是否成功,请给它编号。在这里,您将带符号的符号列表作为第二个参数传递。