我有这个clisp列表,想要访问原子d in (A B C D)) 同 (设置'列表'(a(b c.d))) (车(cdr(车(cdr list))))或(车(cdr(车(cdr'(a(b c.d)))))) 我得到了c,我真的不知道如何去做d
Thank you for all!
Kwatford给了我这个答案 (设置'列表'(a(b c.d))) (A B C D)) (cddadr列表) d
答案 0 :(得分:0)
让我们一步一步......
* (set 'list '(a (b c . d)))
(A (B C . D))
此列表的CAR是A.我们在CDR中需要一些内容。
* (cdr list)
((B C . D))
这是一个元素的列表。它的CAR是内部列表,CDR是零。
* (car (cdr list))
(B C . D)
现在我们看到奇怪的部分。不要太担心它 - 我们知道它的CAR是B,我们不希望这样,所以它必须在CDR ......
* (cdr (car (cdr list)))
(C . D)
这是最后的CONS细胞。 CAR是C,但CDR怎么样?
* (cdr (cdr (car (cdr list))))
D
好的,这很有效,但那个小点有什么用呢?通常,列表的CDR的内容是另一个CONS小区。列表实现为链表,每个单元包含CAR中的元素和指向CDR中下一个列表节点的指针。但这仅适用于列表 - 没有规则CONS小区必须包含一个项目,然后是另一个列表。点是解释器如何让你知道这不是一个列表,CDR不是一个CONS。
无论如何,这是获得D的简短方法:
* (cddadr list)
D