咨询:如何利用盒指针图创建Scheme列表?
如何根据盒指针图创建Scheme列表
首先还原你提供的盒指针图的结构:
- 最外层是一个cons单元,
car为1,cdr指向第二个cons单元 - 第二个cons单元的
car指向第三个cons单元,cdr指向第四个cons单元 - 第三个cons单元的
car是2,cdr是3(这是一个点对,而非普通列表,因为它的cdr不是空列表或另一个cons) - 第四个cons单元的
car是4,cdr是空列表()
分步构建方式
可以通过cons函数一步步拼接出这个结构:
- 先创建最内层的点对:
(cons 2 3) ; 得到 (2 . 3) - 创建包含
4的末尾列表:(cons 4 '()) ; 得到 (4) - 将点对和末尾列表组合成中间的cons结构:
(cons (cons 2 3) (cons 4 '())) ; 得到 ((2 . 3) 4) - 最后拼接上最外层的
1,得到最终结构:(cons 1 (cons (cons 2 3) (cons 4 '()))) ; 得到 (1 (2 . 3) 4)
直接用字面量表示
Scheme支持直接用列表字面量写出这个结构,和上面的cons组合结果完全等价:
(1 (2 . 3) 4)
核心逻辑说明
- Scheme的列表本质是嵌套的cons单元:每个cons单元有两个部分,
car存储当前元素,cdr要么指向下一个cons单元(延续列表),要么是空列表()(结束列表),要么是具体值(形成点对) - 盒指针图里的每个盒子对应一个cons单元,左格子是
car,右格子是cdr:右格子指向其他盒子就是继续列表,右格子是具体值就是点对,右格子是空盒子就是空列表
内容的提问来源于stack exchange,提问作者Jordan Patton
相关产品推荐
相关产品推荐

