相当于LISP' subst' LIST的功能

时间:2014-08-19 14:11:32

标签: lisp common-lisp

我有以下列表:

(1 (2))

我想用(2(3))替换(2)以获得:

(1 (2 (3)))

如下所示使用 subst 并不会返回所希望的结果:

(subst '(2 (3)) '(2) '(1 (2)))

有没有简单的方法来执行替换?

1 个答案:

答案 0 :(得分:6)

默认情况下,使用eql,您必须指定:test参数才能使用#'equal,以获得您想要的效果。

CL-USER> (subst '(2 (3)) '(2)  '(1 (2)) :test #'equal)
(1 (2 (3)))

如您所见,两个直接指定的列表不是EQL,但它们是EQUAL:

CL-USER> (eql '(2) '(2)) 
NIL
CL-USER> (equal '(2) '(2))
T

在lisp中阅读更多about eq, eql, equal and eqaulp difference