Frame 26中conso为何带有特殊黑方块?cons⁰定义相关疑问
关于Lisp中
conso定义里黑方块(■)的含义解析 问题背景
在Frame 26中给出了conso的定义:
(degree (conso a d p) (== `(,a ■ ,d) p))
目前书中尚未说明这些黑方块的作用,其含义是什么?
提示信息:Frame 3-4中提到'(d a t e ■ s)并非真列表。
黑方块的具体含义
这个黑方块(■)是非真列表(点对/dotted pair)的可视化替代标记,用来替换标准Lisp里表示点对的.符号。
在标准Lisp语法中:
- 真列表的最后一个元素必须是
nil,比如(cons 'a (cons 'b nil))会被简化写成(a b)。 - 如果用
cons构造结构时,第二个参数既不是nil也不是另一个列表,就会形成非真列表,标准写法是(a . b),其中.用来分隔car(第一个元素)和cdr(第二个元素)。
对应到你遇到的代码和提示:
(,a ■ ,d)完全等价于标准Lisp的(,a . ,d),表示一个以a为car、d为cdr的点对。'(d a t e ■ s)等价于'(d a t e . s),它不是真列表,因为结构的末尾是s而非nil。
conso这个定义的作用,就是将变量p约束为这样一个点对结构,用黑方块来更直观地区分真列表和非真列表的结构差异。
内容的提问来源于stack exchange,提问作者Alper
相关产品推荐
相关产品推荐

