对的虚线语法

有一种特殊的语法允许我们以比使用 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,但由于列表不合适,最后的 . 显示为显示列表的最后一个元素不是'()。甚至想到,数据以不同的方式显示,内部数据就像创建时一样。