c语言 - SICP 对指针的描述



这句话来自SICP,我认为它指的是编程语言中的指针/引用。

正如我们所看到的,对提供了一个原始的"胶水",我们可以用它来构造复合数据对象。图 2.2 显示了可视化货币对的标准方法,在本例中,由 (缺点 1 2( 形成的对。在此表示形式(称为框和指针表示法(中,每个对象都显示为指向框的指针。基元对象的框包含对象的表示形式。例如,数字的框包含一个数字。一对的盒子实际上是一个双盒子,左边的部分包含(指向(这对汽车,右边的部分包含 cdr。

在这种情况下,本书讨论的是配对(例如(缺点1 2((以及它们是如何表示的。但是,我们也可以使用对来构造这样的列表:

(缺点

1 (缺点 2 '(

(((

虽然框和指针表示法只是一个符号并且无用,但我认为这看起来很像链表。据我了解,链表是一种数据结构,其中包含一个值和一个指向另一个链表的指针。话虽如此,我认为缺点可以像链表一样构造。我对以下方面感到困惑:

一对的盒子实际上是一个双盒子,左边的部分包含(指向(这对汽车,右边的部分包含 cdr。

我最初认为指针应该在 cdr 上,因为如果我们通过成对构建列表,这将是下一个列表。

我认为这可能是一种不同类型的指针。在这种情况下,指针到底是什么意思?我唯一知道的指针是 c 中使用的指针。SICP 甚至提到任何关于 c 指针的内容吗?

我最初认为指针应该在 cdr 上,因为如果我们通过成对构建列表,这将是下一个列表。

缺点单元格有两个值,一个汽车值和一个 cdr 值。你投入其中的内容不受约束。你可以把任何东西放进去。

您可以从缺点单元格中构建不同的数据结构。单链表只是一个。它可以是一个二叉树,一个通过键和值提供访问的缺点单元格的assoc列表,一个循环数据结构,等等。

如果我们这样做

(cons
      (cons :foo 10)
      (cons :bar 5))

。然后,如何完成从缺点单元到其汽车值的引用,对程序员来说大多是隐藏的。大多数实现都将具有某种数据结构,其中包含从缺点单元到其汽车cdr 组件的指针。通常会对字符和小整数(fixnums(等小对象进行优化 - 这些也可以直接存储在汽车cdr中,而不是使用指向字符对象的指针。

总结

缺点单元格有两个值:汽车cdr。两者都是完全不受约束的:您可以引用任何其他对象/值。

大多数实现都是隐藏的。在 Lisp 中,你得到的只是以下具有基本函数的接口:

  • (consp thing) :如果谓词是缺点单元格,则谓词返回T thing
  • (car cons-cell):缺点单元的汽车值
  • (cdr cons-cell):缺点单元的 CDR 值
  • (cons thing-0 thing-1) :创建一个缺点单元格,thing-0thing-1可以是任何东西。

列表由缺点单元格组成。但是还有其他数据结构可以由缺点单元格组成。

是的,你是对的,缺点单元格用于在 Lisps 中构建链表。

左侧部分包含缺点的值。它是一个指针,因为该值可能是一个数字、一个对象、另一个缺点(例如树(或其他任何东西。

您也是正确的,右侧部分 cdr 包含指向列表中下一个缺点的指针。

因此,列表(54 "foobar" 3)如下所示:

            (car cdr)
             /     
            54      (car cdr)
                     /     
                  "foobar"  (car nil)
                             / 
                            3

相关内容

  • 没有找到相关文章

最新更新