2011-12-02 10 views
8

¿Alguien sabe cuál fue el motivo histórico para introducir un tipo de par de puntos a LISP mientras que el tipo de lista existente cubre todo?¿Cuál fue una razón para introducir un par de puntos en LISP?

También estoy interesado en esto porque los pares de puntos a menudo me confunden.

+2

Por el contrario, '(a b c)' es simplemente azúcar sintáctica para '(a. (B. (C. NIL)))', ¿por qué usar la notación de lista? Honestamente, no sé qué fue primero. Además, la notación de lista no cubre todo lo que hace la notación de par punteado; no hay notación de lista para '(a. b)', por ejemplo. –

+0

¿Es realmente necesaria una notación de lista para '(a. B)'? En cuanto a mí (recién comencé a aprender LISP) '' (a b) 'puede usarse en su lugar: ambos tienen cara y cruz. – bananov

+2

@bananov, '(a b)' es equivalente a '(a. (B. NIL))', que en realidad es una estructura de datos más grande. Si solo permites listas planas (en lugar de árboles binarios), las caras y las colas necesitarán un tratamiento diferente y complicará significativamente el idioma (mira qué tan mal Clojure lo jodió). –

Respuesta

14

Lea el artículo de McCarthy de 1960, "Recursive Functions of Symbolic Expressions and Their Computation By Machine, Part I".

Comienza definiendo expresiones S. Una de las reglas es que si e1 es una expresión S y e2 es una expresión S, entonces < e1. e2>, el par de puntos, también es una expresión S.

Algunas líneas más adelante, define la notación de la lista, como una abreviatura de una expresión formada por una cadena de pares de puntos.

Este fue el documento que primero definió lo que eventualmente se convertiría en LISP. No se convirtió en un lenguaje de programación real hasta que Steve "Slug" Russell implementó el primer intérprete.

5

Existente cons tipo cubre todo (relacionado con la lista). La notación de par punteado es meramente sintaxis para un literal cons.

2

Como puede leer en los comentarios a su pregunta, el par de puntos no se introdujo al lado de un tipo de lista ya existente; en cambio, se introdujo como la estructura de datos inicial, y las listas se implementan en pares de puntos.

En cuanto a la pregunta por qué se eligió el par de puntos, creo que fue guiado por el hardware del sistema LISP original fue implementado en: los IBM 704. Como se puede leer en the wikipedia article on car and cdr, tenía una de 36 bits palabra, que se puede acceder en cuatro partes: dos de 15 bits y dos de 3 bits.
Con hardware como este, es muy natural poner una dirección de 15 bits en cada una de las dos partes de 15 bits de una palabra de máquina, y voilà, tiene un 'par de puntos'.

Consulte también the History of Lisp para obtener más información sobre el diseño del sistema.

+2

No lo creo. Los pares provienen de las matemáticas en las que McCarthy estaba trabajando, no de la máquina. La celda de cons no es algo puntuado; es la implementación de la máquina de un par abstracto. – Kaz

Cuestiones relacionadas