- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
来自 SICP
Exercise 2.24: Suppose we evaluate the expression (list 1 (list 2 (list 3 4))). Give the result printed by the interpreter, the corresponding box-and-pointer structure, and the interpretation of this as a tree (as in Figure 2.6).
问题是我的眼睛坏了,所以我既看不到盒子和指针图,也看不到图2.6。所以现在我只能猜测这个列表应该像树一样基于:
Another way to think of sequences whose elements are sequences is as trees. The elements of the sequence are the branches of the tree, and elements that are themselves sequences are subtrees.
请检查我的树解释。这只是我的想象。我非常有信心这是正确的,但无法确认,因为我找到的所有练习答案都是图片,我的屏幕阅读器无法阅读它们。
(list 1 (list 2 (list 3 4))) - 我认为这是树本身,或者根节点。这棵树有两个分支或 child 。
第一个分支 (1) 是叶节点,因此我们在树的这一侧完成。
第二个分支(list 2(list 3 4)是另一棵树。
现在我们关注子树(列表 2(列表 3 4)。它有两个 child /分支。
第一个分支是叶节点 (2),所以我们到这里就完成了。
第二个分支是另一棵树(列表 3 4)。
现在我们关注子树(列表 3 4)。它有两个子分支。
它们都是叶节点,所以我们完成了。
这是正确的吗?我对这棵树的理解正确吗?
最佳答案
Lisp 中真正的列表构建原语是cons
。作为评估形式 (list 1 2 3)
的结果的列表与评估 (cons 1 (cons 2 (cons 3 '())))
,也可以写成 '(1 2 3 . ())
,或者全点形式 '(1 . (2 . (3 . ())) )
。
所有这些都将被解释器打印为(1 2 3)
:
(list 1 2 3) '(1 2 3) ; (1 2 3)
(cons 1 (list 2 3)) '(1 . (2 3)) ; (1 2 3)
(cons 1 (cons 2 (list 3))) '(1 . (2 . (3))) ; (1 2 3)
(cons 1 (cons 2 (cons 3 '()))) '(1 . (2 . (3 . ()))) ; (1 2 3)
从树的角度来看,(1 2 3)
有三个分支 - 都是叶节点:1、2 和 3。另一方面,(1 (2 3))
有两个分支——一个叶子和一个由两个叶子节点组成的树。并且 ((1 2) 3)
也有两个分支 - 一个有两个叶分支的树,和一个叶分支。
作为框和指针结构,点代表 cons 单元(即框),每个单元都有两个槽或指针 - car
(在点的左侧)和cdr
(在点的右边)。
因此,评估 (list 1 (list 2 3))
的结果,打印为 (1 (2 3))
,也是由调用 (cons 1 (cons (cons 2 (cons 3 '())) '()))
;所以作为一个框指针结构,它实际上是 '(1 . ( (2 . (3 . ())) . () ))
。它的car
是1
,它的cdr
是盒子( (2 . (3 . ())) . () )
其 cdr
是 ()
及其 car
- 盒子 (2 . (3 . ()))
;等等
在其最后一个框的 cdr
中带有 ()
的列表被称为“正确列表”。任何其他的都被称为“不正确的列表”,例如
'(1 2 . 3)
= '(1 . (2 . 3))
= (cons 1 (cons 2 3))
关于list - 理解 SICP 中的树 - 练习 2.24,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34605872/
关于 B 树与 B+ 树,网上有一个比较经典的问题:为什么 MongoDb 使用 B 树,而 MySQL 索引使用 B+ 树? 但实际上 MongoDb 真的用的是 B 树吗?
如何将 R* Tree 实现为持久(基于磁盘)树?保存 R* 树索引或保存叶值的文件的体系结构是什么? 注意:此外,如何在这种持久性 R* 树中执行插入、更新和删除操作? 注意事项二:我已经实现了一个
目前,我正在努力用 Java 表示我用 SML 编写的 AST 树,这样我就可以随时用 Java 遍历它。 我想知道是否应该在 Java 中创建一个 Node 类,其中包含我想要表示的数据,以及一个数
我之前用过这个库http://www.cs.umd.edu/~mount/ANN/ .但是,它们不提供范围查询实现。我猜是否有一个 C++ 范围查询实现(圆形或矩形),用于查询二维数据。 谢谢。 最佳
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择
操作系统的那棵“树” 今天从一颗 开始,我们看看如何从小树苗长成一颗苍天大树。 运转CPU CPU运转起来很简单,就是不断的从内存取值执行。 CPU没有好好运转 IO是个耗费时间的活,如果CPU在取值
我想为海洋生物学类(class)制作一个简单的系统发育树作为教育示例。我有一个具有分类等级的物种列表: Group <- c("Benthos","Benthos","Benthos","Be
我从这段代码中删除节点时遇到问题,如果我插入数字 12 并尝试删除它,它不会删除它,我尝试调试,似乎当它尝试删除时,它出错了树的。但是,如果我尝试删除它已经插入主节点的节点,它将删除它,或者我插入数字
B+ 树的叶节点链接在一起。将 B+ 树的指针结构视为有向图,它不是循环的。但是忽略指针的方向并将其视为链接在一起的无向叶节点会在图中创建循环。 在 Haskell 中,如何将叶子构造为父内部节点的子
我在 GWT 中使用树控件。我有一个自定义小部件,我将其添加为 TreeItem: Tree testTree = new Tree(); testTree.addItem(myWidget); 我想
它有点像混合树/链表结构。这是我定义结构的方式 struct node { nodeP sibling; nodeP child; nodeP parent; char
我编写了使用队列遍历树的代码,但是下面的出队函数生成错误,head = p->next 是否有问题?我不明白为什么这部分是错误的。 void Levelorder(void) { node *tmp,
例如,我想解析以下数组: var array1 = ["a.b.c.d", "a.e.f.g", "a.h", "a.i.j", "a.b.k"] 进入: var json1 = { "nod
问题 -> 给定一棵二叉树和一个和,确定该树是否具有从根到叶的路径,使得沿路径的所有值相加等于给定的和。 我的解决方案 -> public class Solution { public bo
我有一个创建 java 树的任务,它包含三列:运动名称、运动类别中的运动计数和上次更新。类似的东西显示在下面的图像上: 如您所见,有 4 种运动:水上运动、球类运动、跳伞运动和舞蹈运动。当我展开 sk
我想在 H2 数据库中实现 B+ Tree,但我想知道,B+ Tree 功能在 H2 数据库中可用吗? 最佳答案 H2 已经使用了 B+ 树(PageBtree 类)。 关于mysql - H2数据库
假设我们有 5 个字符串数组: String[] array1 = {"hello", "i", "cat"}; String[] array2 = {"hello", "i", "am"}; Str
我正在处理树。每个节点都有带有 Tree * 值的对象。我读取的数据如下所示: 1 2 2 ... 这意味着,将 1 作为 0 的子节点,将 2 作为 1 的子节点,将 3 作为 o 2 的子节点。在
我正在寻找一个好的 JavaScript 树/树网格包。现在——在你回答之前: 它需要能够在大量节点上正常运行。可能有 1,000 个兄弟节点。它需要能够在 2 或 3 秒内绘制到 1,000 个节点
下面的代码块究竟是如何工作的?更具体地说,程序如何知道返回哪个选项? return ancestor (node1->left(), node2) || ancestor
我是一名优秀的程序员,十分优秀!