Maclisp (o MACLISP , a veces llamado MacLisp o MacLISP ) es un lenguaje de programación , un dialecto del lenguaje Lisp . Se originó en el Proyecto MAC del Instituto Tecnológico de Massachusetts (MIT) [1] (del cual derivó su prefijo) a fines de la década de 1960 y se basó en Lisp 1.5. [2] Richard Greenblatt fue el desarrollador principal del código base original para PDP-6 ; [1] Jon L. White fue responsable de su mantenimiento y desarrollo posteriores. El nombre Maclisp comenzó a usarse a principios de la década de 1970 para distinguirlo de otras bifurcaciones de PDP-6 Lisp, en particular BBN Lisp .
Maclisp es un descendiente de Lisp 1.5 . [3] Maclisp se diferencia de Lisp 1.5 al usar una celda de valor para acceder y almacenar los valores dinámicos de las variables ; [4] Lisp 1.5 usaba una búsqueda lineal de una lista de asociación para determinar el valor de una variable. [5] La evaluación de variables de Maclisp es más rápida pero tiene una semántica de variables diferente. Maclisp también empleó macros de lectura para hacer más legibles las entradas y salidas , denominadas entrada/salida (E/S). En lugar de ingresar (QUOTE A)
, se podría ingresar 'A
para obtener la misma expresión s . Aunque ambas implementaciones colocan funciones en la lista de propiedades, Maclisp usa una sintaxis diferente para definir funciones. [6] Maclisp también tiene una característica de carga a pedido. [7]
Maclisp comenzó en las computadoras PDP-6 y PDP-10 de Digital Equipment Corporation que ejecutaban el sistema de tiempo compartido incompatible (ITS); más tarde se adaptó a todos los demás sistemas operativos PDP-10, por ejemplo, Timesharing/Total Operating System , TOPS-10 y TOPS-20 . La implementación original estaba en lenguaje ensamblador , pero una implementación posterior en Multics utilizó PL/I . Maclisp se desarrolló considerablemente durante su existencia. Se agregaron características importantes [ ¿cuáles? ] que en otros sistemas de lenguaje normalmente corresponderían a números de versiones principales. [ dudoso – discutir ]
Maclisp se utilizó para implementar el sistema de álgebra computacional (CAS) de Macsyma o el programa de álgebra simbólica. El desarrollo de Macsyma también impulsó varias características [ ¿cuáles? ] en Maclisp. El programa de bloques SHRDLU se escribió en Maclisp, por lo que el lenguaje se usó ampliamente en la comunidad de investigación de inteligencia artificial (IA) hasta principios de la década de 1980. También se utilizó para implementar otros lenguajes de programación, como Planner y Scheme . Multics Maclisp se utilizó para implementar el primer Emacs basado en Lisp .
Maclisp fue una implementación influyente de Lisp, pero ya no se le da mantenimiento de forma activa. Ahora se ejecuta en emuladores PDP-10 y se puede usar para experimentar con los primeros programas de IA.
Maclisp comenzó con un número pequeño y fijo de tipos de datos : cons cell, atom (más tarde llamado symbol ), whole y floating-point number . Las incorporaciones posteriores incluyeron: arrays , que nunca fueron tipos de datos de primera clase; números enteros de precisión arbitraria (bignums); strings ; y tuples . Todos los objetos (excepto inums) se implementaron como punteros , y su tipo de datos estaba determinado por el bloque de memoria al que apuntaban, con un caso especial para números pequeños (inums).
Los programas se podían interpretar o compilar . El comportamiento compilado era el mismo que el interpretado, excepto que las variables locales eran léxicas por defecto en el código compilado, a menos que se declararan SPECIAL, [8] y no se realizaba ninguna comprobación de errores para operaciones en línea como CAR y CDR. El compilador Ncomplr (mediados de los años 1970) introdujo un soporte numérico rápido para los lenguajes Lisp, generando código de máquina (instrucciones) para aritmética en lugar de llamar a rutinas interpretativas que se despachaban en función del tipo de datos. Esto hizo que la aritmética Lisp fuera comparable en velocidad a Fortran para operaciones escalares (aunque la implementación de Fortran en matrices y bucles siguió siendo mucho más rápida).
La versión original estaba limitada por la dirección de memoria de palabras de 18 bits del PDP-10, y se dedicó un esfuerzo considerable a mantener la implementación simple y ágil. Multics Maclisp tenía un espacio de direcciones mucho mayor, pero su uso era costoso. Cuando se superaron la memoria y la capacidad de procesamiento del PDP-10 , se inventó la máquina Lisp : Lisp Machine Lisp es el descendiente directo de Maclisp. También se utilizaban otros dialectos de Lisp , y la necesidad de unificar la comunidad dio como resultado el lenguaje moderno Common Lisp .
Maclisp recibió su nombre del Proyecto MAC y no está relacionado con la computadora Macintosh (Mac) de Apple, a la que precede por décadas, ni con John McCarthy . Los diversos sistemas Lisp para Macintosh no tienen ninguna similitud particular con Maclisp. [9]
El lenguaje de alto nivel utilizado para la mayor parte del programa del laboratorio de visión es el sistema PDP-6 LISP. Este sistema se basa principalmente en el lenguaje de programación LISP 1.5, pero ha sido ampliamente modificado de varias maneras. Estas incluyen muchas funciones y servicios nuevos, incluidas facilidades para vincularse con programas escritos en otros lenguajes.
e
en el entorno a
se realiza con (cdr (assoc e a))
. Esto implica una búsqueda lineal en la lista de asociaciones a
. En la p. 71 se ofrece una descripción más detallada con constantes globales y errores; realiza una búsqueda lineal en la lista de propiedades antes de buscar en la lista de asociaciones.defun
; Lisp 1.5 usa define
.autoload
propiedad.Si la variable que se va a vincular se ha declarado como especial, la vinculación se compila como código para imitar la forma en que el intérprete vincula las variables.
El proyecto MAC no tenía nada que ver con el "Mac" de Apple. Y tampoco MACLISP.