我有以下清单:

(1 (2))

我想用(2(3))来代替(2),以获得:
(1 (2 (3)))

使用下面的subst不会返回所需的结果:
(subst '(2 (3)) '(2) '(1 (2)))

有没有一种简单的替代方法?

最佳答案

默认情况下,subst使用eql,必须指定:test参数才能使用#'equal,才能获得所需的结果。

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

如您所见,两个直接指定的列表不是EQL,但它们是相等的:
CL-USER> (eql '(2) '(2))
NIL
CL-USER> (equal '(2) '(2))
T

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

关于lisp - 与LIST的LISP'subst'功能等效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25385648/

10-10 13:49