有没有人知道在LISP中引入点对类型的历史原因是什么,而现有的列表类型涵盖了所有内容?
我也对此感兴趣,因为虚线对经常让我感到困惑。
答案 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
。