如何在此clisp列表中访问d?

时间:2014-05-06 22:06:39

标签: clisp

我有这个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

1 个答案:

答案 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