AutoLISP
AutoLISP es un dialecto del lenguaje de programación Lisp creado específicamente para su uso con la versión completa de AutoCAD y sus derivados, que incluyen AutoCAD Map 3D, AutoCAD Arquitectura y AutoCAD Mechanical. Ni la interfaz de programación de aplicaciones (API) ni el intérprete para ejecutar el código de AutoLISP están incluidos en la línea de productos de AutoCAD LT. Se incluye un subconjunto de funciones de AutoLISP en la aplicación web de AutoCAD basada en navegador.
Características
AutoLISP es un dialecto de lenguaje Lisp pequeño, de ámbito dinámico y tipado dinámicamente con recolección de basura, estructura de lista inmutable y símbolos configurables, que carece de funciones Lisp regulares como sistema de macros, facilidades de definición de registros, matrices, funciones con un número variable de argumentos o dejar ataduras. Además del lenguaje principal, la mayoría de las funciones básicas son para geometría, acceso a la base de datos DWG interna de AutoCAD o manipulación de entidades gráficas en AutoCAD. Las propiedades de estas entidades gráficas se revelan a AutoLISP como listas de asociación en las que los valores se emparejan con códigos de grupo de AutoCAD que indican propiedades tales como puntos de definición, radios, colores, capas, tipos de línea, etc. AutoCAD carga AutoLISP código de archivos.LSP.
El código de AutoLISP puede interactuar con el usuario a través del editor gráfico de AutoCAD mediante el uso de funciones primitivas que permiten al usuario seleccionar puntos, elegir objetos en la pantalla e ingresar números y otros datos. AutoLisp también tiene una interfaz gráfica de usuario (GUI) integrada o un lenguaje específico de dominio (DSL), el lenguaje de control de diálogo, para crear cuadros de diálogo modales con diseño automatizado, dentro de AutoCAD.
Historia
AutoLISP se derivó de una versión anterior de XLISP, creada por David Betz. El lenguaje se introdujo en la versión 2.18 de AutoCAD en enero de 1986 y continuó mejorándose en versiones sucesivas hasta la versión 13 en febrero de 1995. Después de eso, Autodesk descuidó su desarrollo en favor de entornos de desarrollo más modernos como Visual Basic para aplicaciones (VBA),.NET Framework y ObjectARX. Sin embargo, se ha mantenido como el principal lenguaje de personalización de usuarios de AutoCAD.
Vital-LISP, una versión considerablemente mejorada de AutoLISP que incluye un entorno de desarrollo integrado (IDE), depurador, compilador y compatibilidad con ActiveX, fue desarrollada y vendida por el desarrollador externo Basis Software. Vital LISP era un superconjunto del lenguaje AutoLISP existente que agregaba acceso similar a VBA al modelo de objetos de AutoCAD, reactores (manejo de eventos para objetos de AutoCAD), compatibilidad general con ActiveX y algunas otras funciones generales de Lisp. Autodesk lo compró, lo rebautizó como Visual LISP y lo vendió brevemente como un complemento de la versión 14 de AutoCAD lanzada en mayo de 1997. Se incorporó a AutoCAD 2000 lanzado en marzo de 1999, como reemplazo de AutoLISP.. Desde entonces, Autodesk ha dejado de realizar mejoras importantes en Visual LISP y se ha centrado más en VBA,.NET y C++. A partir del 31 de enero de 2014, Autodesk ya no admite versiones de VBA anteriores a la 7.1. Esto es parte de un proceso a largo plazo de cambio de VBA a.NET para la personalización del usuario.
AutoLISP tiene tantos seguidores que otros proveedores de aplicaciones de diseño asistido por computadora (CAD) lo agregan a sus productos. Bricscad, IntelliCAD, DraftSight y otros tienen la funcionalidad de AutoLISP, por lo que los usuarios de AutoLISP pueden considerar usarlos como una alternativa a AutoCAD. La mayor parte del desarrollo relacionado con AutoLISP desde AutoCAD 2000 se realiza dentro de Visual LISP desde que el motor AutoLISP original fue reemplazado por el motor Visual LISP. Hay miles de utilidades y aplicaciones que se han desarrollado utilizando AutoLISP o Visual LISP (distribuidas como archivos LSP, FAS y VLX).
1955 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1,5, LISP 2(abandonado) | ||||||||||||||
Maclisp | ||||||||||||||
Interlisp | ||||||||||||||
MDL | ||||||||||||||
Lisp Machine Lisp | ||||||||||||||
Plan | R5RS | R6RS | R7RS pequeño | |||||||||||
NIL | ||||||||||||||
ZIL (Zork Implementation Language) | ||||||||||||||
Franz Lisp | ||||||||||||||
Lisp común | ANSI standard | |||||||||||||
Le Lisp | ||||||||||||||
MIT Plan | ||||||||||||||
T | ||||||||||||||
Chez Scheme | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
PicoLisp | ||||||||||||||
Gambit | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
PLT Plan | Racket | |||||||||||||
GNU Guile | ||||||||||||||
Visual LISP | ||||||||||||||
Clojure | ||||||||||||||
Arc | ||||||||||||||
LFE | ||||||||||||||
Hy |
Ejemplos
Un sencillo programa Hello world en AutoLISP sería:
()defun Hola. () ) ()princ "nHello World!") ()princ))
Observe la línea final dentro de la definición de la función: cuando se evalúa sin argumentos, la función princ
devuelve un símbolo nulo, que no se muestra en la interfaz de línea de comandos de AutoCAD. Como la línea de comando de AutoCAD funciona como un bucle de lectura, evaluación e impresión (REPL), esto normalmente imprimiría "¡Hola mundo!" a la línea de comando, seguido inmediatamente por el valor de retorno de la llamada a princ
. Por lo tanto, sin la llamada final a la función princ
, el resultado de esto sería:
Hello World!"nHello World!"
La función prin1
también se puede usar para lograr el mismo resultado.
Un ejemplo más complejo es:
()defun c:pointlabel () / pnt ) ()si ()setq pnt ()punto "nSpecify point: ") ()progn ()entmake ()lista '()0 . "POINT") ()cons 10 ()trans pnt 1 0) ) ) ()entmake ()lista '()0 . "TEXTO") ()cons 10 ()trans ()cons ()+ ()coche pnt) 0.6) ()cdr pnt) 1 0) ()cons 40 ()getvar 'textsize) ()cons 1 ()strcat "X:" ()rtos ()coche pnt) "Y:" ()rtos ()cadr pnt))) ) ) ) ) ()princ))
El código anterior define una nueva función que genera un objeto de punto de AutoCAD en un punto determinado, con un objeto de texto de una línea que muestra las coordenadas X e Y a su lado. El nombre de la función incluye un prefijo especial 'c:', que hace que AutoCAD reconozca la función como un comando normal. El usuario, al teclear 'pointlabel' en la línea de comandos de AutoCAD, se le pedirá que elija un punto, ya sea escribiendo las coordenadas X e Y o haciendo clic en una ubicación en el dibujo. Luego, la función colocaría un marcador en ese punto y crearía un objeto de texto de una línea junto a él, que contiene las coordenadas X e Y del punto expresadas en relación con el Sistema de coordenadas de usuario (UCS) activo. La función no requiere parámetros y contiene una variable local ('pnt').
El ejemplo anterior también podría escribirse usando los comandos integrados de AutoCAD para lograr el mismo resultado; sin embargo, este enfoque es susceptible de cambios en las indicaciones de comando entre las versiones de AutoCAD.
Contenido relacionado
Referencia (informática)
DEC Alfa
Programación imperativa