list - 这是给定嵌套结构 [SICP] 的正确表示形式吗?我错过了什么?
问题描述
SICP 的第 2.2.2 节(层次结构)的第二句:作者说((1 2) 3 4)
(三个元素的列表)可以由(cons (list 1 2) (list 3 4))
.
我认为(当然是错误的)它将构造((1 2) (3 4))
(两个元素),因为:
3
并且4
将包含在嵌套list
的非顶层中cons
,并且cons
构造一对项目,pair 表示 2 个元素而不是 3 个。
我在这里不明白什么?
解决方案
列表是一串对,以一个cdr
为空列表的对结尾。
(list 3 4)
是两对,相当于
(cons 3 (cons 4 '()))
3对也是如此(cons (list 1 2) (list 3 4))
,相当于
(cons (list 1 2) (cons 3 (cons 4 '())))
一般来说,如果你有一个 list old-list
,你可以在前面创建一个新元素的新列表:
(cons new-element old-list)
如果你写的话,你会得到你所期望的
(list (list 1 2) (list 3 4))
推荐阅读
- python - Change django admin site url dynamiclly
- java - java NoSuchElementException:找不到行
- video - 使用 ffmpeg 批量转换视频,同时复制文件夹层次结构中的其他文件
- c# - 如何在 Windows Vista 下以管理员模式启动进程?
- node.js - 如何从 request.get 流式传输数据并推送到数组 [nodejs]
- google-bigquery - 使用 node.js 从 bigquery 中的查询结果创建表
- html - 样式标签和
标签在 Jasper 报告中不能一起使用 - c# - NLog dll 未从类库复制到使用应用程序
- go - 为什么函数执行后值会发生变化?
- java - 如何识别双精度值和负值