有没有什么方法可以在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