我意识到这是一个总的n00b问题,但我很好奇,我想我可能会在这里获得比其他任何地方更好的解释.这是一个列表(我正在使用Dr. Scheme)
> (list 1 2 3)
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
我认为这只是糖:
> (cons 1 (cons 2 (cons 3 null)))
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
另一方面,这做了其他事情:
> (cons 1 (cons 2 3))
(1 2 . 3)
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么会有所不同?要求列表末尾的空值有什么意义?
Vin*_*nie 11
列表的定义是递归的.
1. The null list (empty list) is a list
2. A list is made up of an item cons a list
Run Code Online (Sandbox Code Playgroud)
所以这些是列表:
1. null => () --read as empty list
2. cons 3 null => (3)
3. cons2 (cons 3 null) => (2, 3)
Run Code Online (Sandbox Code Playgroud)
您给出的最后一个示例2 3不符合此列表定义,因此它不是列表.这是缺点接受一个项目和一个列表.3不是清单.