在LISP中引入点对的原因是什么?

时间:2011-12-02 15:41:14

标签: list lisp

有没有人知道在LISP中引入点对类型的历史原因是什么,而现有的列表类型涵盖了所有内容?

我也对此感兴趣,因为虚线对经常让我感到困惑。

3 个答案:

答案 0 :(得分:15)

阅读McCarthy 1960年的论文"Recursive Functions of Symbolic Expressions and Their Computation By Machine, Part I"

他首先定义S表达式。其中一个规则是,如果e1是S表达式而e2是S表达式,那么< e1。 e2>,点对,也是S表达式。

几行后,他定义了列表符号,作为由一对点对构成的表达式的简写。

这篇论文首先定义了最终将成为LISP的内容。直到Steve“Slug”Russell实施了第一个翻译,它才成为一种实际的编程语言。

答案 1 :(得分:5)

现有的 cons 类型涵盖了所有内容(与列表相关)。虚线对符号仅仅是cons文字的语法。

答案 2 :(得分:2)

正如您可以在对您的问题的评论中读到的那样,在现有的列表类型旁边没有引入虚线对;相反,它是作为初始数据结构引入的,列表以点对形式实现。

关于为什么选择虚线对的问题,我认为它是由原始LISP系统实现的硬件引导的:IBM 704.可以在{{3}中读到它有一个36位字,可以分为四个部分访问:两个15位和两个3位部分。
使用这样的硬件,在机器字的两个15位部分中的每一个中放置一个15位地址是非常自然的,瞧,你有一个“虚线对”。

有关系统设计的更多信息,另请参阅the wikipedia article on car and cdr