mor*_*ode 0 c lisp pointers linked-list sicp
这句话来自SICP,我认为是在讨论编程语言中的指针/引用.
正如我们所看到的,对提供了一个原始的"粘合剂",我们可以用它来构造复合数据对象.图2.2显示了可视化一对的标准方法 - 在这种情况下,由(cons 1 2)形成的对.在这种称为盒子和指针表示法的表示中,每个对象都显示为指向盒子的指针.原始对象的框包含对象的表示.例如,数字框包含数字.一对的盒子实际上是一个双盒子,左边的部分包含(指向)该对的汽车,右边的部分包含cdr.
在这种情况下,这本书正在讨论对(EG(缺点1 2))以及如何表示它们.但是我们也可以使用pair来构造这样的列表:
(缺点1(缺点2'()))
虽然box-and-pointer-notation只是一种符号而且毫无用处,但我认为这看起来很像一个链表.据我了解,链表是一个数据结构,包含一个值和指向另一个链表的指针.话虽如此,我认为缺点可以像链表一样构建.我很困惑:
一对的盒子实际上是一个双盒子,左边的部分包含(指向)该对的汽车,右边的部分包含cdr.
我原本以为指针应该在cdr上,因为如果我们通过对构建一个列表,那将是下一个列表.
我认为这可能是一种不同的指针.在这种情况下,指针到底意味着什么?我知道的唯一指针是c中使用的指针.SICP甚至提到了有关c指针的任何内容吗?
我原本以为指针应该在cdr上,因为如果我们通过对构建一个列表,那将是下一个列表.
cons单元有两个值,car值和cdr值.你投入的内容不受限制.你可以放任何东西.
您可以使用cons单元格构建不同的数据结构.单链表只是一个.它可以是二叉树,通过键和值提供访问的cons单元的关联列表,循环数据结构等等.
如果我们这样做
(cons
(cons :foo 10)
(cons :bar 5))
Run Code Online (Sandbox Code Playgroud)
...然后,如何完成从cons单元格到其汽车价值的参考是程序员隐藏的.大多数实现将在下面具有某种数据结构,其中包含从cons单元到其car和cdr组件的指针.通常会对字符和小整数(fixnums)等小对象进行优化- 这些也可以直接存储在汽车和cdr中,而不是使用指向字符对象的指针.
摘要:
一个缺点单元有两个值:汽车和CDR.两者都完全不受约束:您可以引用任何其他对象/值.
大多数实现都是隐藏的.在Lisp中,你得到的只是跟随基本功能的界面:
(consp thing):谓词返回Tif thing是一个cons单元格.(car cons-cell) :cons细胞的汽车价值(cdr cons-cell) :cons单元格的cdr值(cons thing-0 thing-1):创建一个cons单元,thing-0并且thing-1可以是任何东西.列表由cons单元组成.但是还有其他数据结构可以由cons细胞构成.