有没有什么方法可以在lisp中生成类似于另一个关联列表中的关联列表的内容,我尝试了:

(setq alist '((A . B) (B . C) (C . (D . E))))

但它给出了:
((A . B) (B . C) (C D . E))

然后做一件类似的事情:
(assoc 'd (assoc 'c alist))

我得到这个错误:
Maximum error depth exceeded (22 nested errors) with
'The value C is not of type LIST.'.

最佳答案

((A . B) (B . C) (C . (D . E)))不是嵌套的关联列表。

((A . B)
 (B . C)
 (C . (D . E))  ; <-  (d . e)  is not an assoc list. Just one association.
)

您想要一个关联列表:((d . e))
所以这个解决方案:
CL-USER 5 > (assoc 'C '((A . B) (B . C) (C . ((D . E)))))
(C (D . E))

CL-USER 6 > (assoc 'd (cdr (assoc 'C '((A . B) (B . C) (C . ((D . E)))))))
(D . E)

注意'(C . (D . E))(C D . E)都是同一结构的列表,只是书写方式不同:
CL-USER 8 > (equal '(C . (D . E)) '(C D . E))
T

09-11 19:23