对的虚线语法
有一种特殊的语法允许我们以比使用 cons
构造函数更紧凑的方式编写 cons
单元格。
一对可以写成:
'(1 . 2) == (cons 1 2)
最大的区别是我们可以使用 quote 创建 pairs
。否则,Scheme 会创建一个合适的列表 (1 . (2 . '()))
。
点语法强制表达式只有 2 个成员。每个成员可以是任何类型,包括成对。
'(1 . (2 . (3 . 4)))
> (1 2 3 . 4)
请注意,不正确的列表应在末尾带一个点,以显示最后一对列表的 cdr
不是空列表'()
。
这种显示列表的方式有时令人困惑,因为下面的表达式将表达不像人们期望的那样。
'((1 . 2) . ( 3 . 4))
> ((1 . 2) 3 . 4)
由于列表通常跳过 .
,列表的第一个参数将是 (1 . 2)
,第二个参数将是 3
,但由于列表不合适,最后的 .
显示为显示列表的最后一个元素不是'()
。甚至想到,数据以不同的方式显示,内部数据就像创建时一样。