首页 > 解决方案 > Common Lisp 中的 cell 和 cons cell 是否相同?以及如何访问单元格的内容?

问题描述

我是编程和 CL 的新手。我试图理解细胞的概念。我有时会在 SO 问题和其他地方看到这两个术语:cell 和 cons cell。它们是一回事吗?还是他们不同?

有人让我将单元格作为指针(在 C 中),但由于对 C 语言一无所知,我面临两个问题而不是一个。理解指针,然后理解单元格。

所以我的问题是:细胞是某种容器吗?是否可以命名一个空容器,然后在其中放入一些(新)值?如果是,nil 和 '() 的处理方式相同还是不同?

例如:

(defvar *empty-cell-1* nil)
(defvar *empty-cell-2* '())

现在分配:

(defvar *first-cell* *empty-cell-1*)
(defvar *second-cell* *empty-cell-2*)

现在我尝试为两者分配一个值

(setf *first-cell* 0)
(setf *second-cell* 0)

如果我理解正确,两个单元格名称都会获得相同的值。但是,有没有办法将某些东西作为“内容”放入单元格中?类似的东西,这将使第二个单元格类似于 '(0) 而不使用 list 语句?还是单个元素列表等效于单个单元格(作为容器)及其内容(作为分配值)?

我的基本困惑是,如何区分容器和单元格的内容,而不是列表。还是我理解单元格的方法不适合 common-lisp?

标签: common-lisp

解决方案


推荐阅读