La Programación en AutoLISP

39
7/23/2019 La Programación en AutoLISP http://slidepdf.com/reader/full/la-programacion-en-autolisp 1/39 Programación en AutoLISP  ONCE.1. INTRODUCCIÓN A parte de todo lo visto en cuestión de personalización, AutoCAD 14 ofrece al usuario la posibilidad de crear programas y aplicaciones verticales totalmente funcionales. Estos programas podrán ser distribuidos por el creador, eso sí, siempre correrán bajo AutoCAD. La capacidad para hacer un programa nos lleva mucho más allá de la simple personalización de mens o patrones de sombreado, nos lleva a un mundo totalmente integrado en AutoCAD desde donde podremos dise!ar nuestros propios comandos, manipular dibujos o incluso acceder a la "ase de #atos interna del programa. AutoCAD 14 proporciona diversas interfaces de programación de aplicaciones $ue vamos a comentar ahora de forma somera. ONCE.1.1. AutoLISP, ADS, AR, !"A # !i$ua% Li$& ONCE.1.1.1. Entorno AutoLISP #entro de lo $ue es la programación e%isten diversas interfaces para crear programas paraAutoCAD. El más antiguo y, $uizá el más utilizado hasta ahora, es AutoL&'(. AutoL&'( es una adaptación del lenguaje de programación L&'( $ue forma parte íntima e integrada con AutoCAD, esto es, AutoCAD posee internamente un propio int)rprete de L&'(. El lenguaje L&'( está basado en lo $ue se denominan listas de símbolos. Es un lenguaje de alto nivel *como "A'&+ y $ue, en principio, fue dise!ado para la investigación en el campo de la inteligencia artificial. AutoL&'( es un lenguaje evaluado, es decir, está a un paso entre los lenguajes interpretados, por un lado, y los lenguajes compilados, por otro. +omo hemos dicho, AutoCAD provee al usuario de un propio int)rprete de AutoL&'( interno. Este int)rprete, al $ue habría $ue llamarle evaluador , se encarga -precisamente- de evaluar las e%presiones incluidas en el código fuente de un programa. Estos programas pueden introducirse directamente desde la línea de comandos de AutoCAD, o bien cargarse en memoria a partir de un programa completo escrito es un archivo de te%to A'+&&. #ichos archivos tendrán habitualmente la e%tensión .LSP. #e la programación en AutoL&'( hablaremos largo y tendido en este MÓDULO.

Transcript of La Programación en AutoLISP

Page 1: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 1/39

Programación en AutoLISP

 ONCE.1. INTRODUCCIÓN

A parte de todo lo visto en cuestión de personalización, AutoCAD 14 ofrece alusuario la posibilidad de crear programas y aplicaciones verticales totalmentefuncionales. Estos programas podrán ser distribuidos por el creador, eso sí, siemprecorrerán bajo AutoCAD.

La capacidad para hacer un programa nos lleva mucho más allá de la simplepersonalización de mens o patrones de sombreado, nos lleva a un mundo

totalmente integrado en AutoCAD desde donde podremos dise!ar nuestros propioscomandos, manipular dibujos o incluso acceder a la "ase de #atos interna delprograma.

AutoCAD 14 proporciona diversas interfaces de programación de aplicaciones $uevamos a comentar ahora de forma somera.

ONCE.1.1. AutoLISP, ADS, AR, !"A #!i$ua% Li$&ONCE.1.1.1. Entorno AutoLISP#entro de lo $ue es la programación e%isten diversas interfaces para crearprogramas paraAutoCAD. El más antiguo y, $uizá el más utilizado hasta ahora, esAutoL&'(. AutoL&'( es una adaptación del lenguaje de programación L&'( $ueforma parte íntima e integrada con AutoCAD, esto es, AutoCAD poseeinternamente un propio int)rprete de L&'(.

El lenguaje L&'( está basado en lo $ue se denominan listas de símbolos. Es unlenguaje de alto nivel *como "A'&+ y $ue, en principio, fue dise!ado para lainvestigación en el campo de la inteligencia artificial. AutoL&'( es un lenguaje

evaluado, es decir, está a un paso entre los lenguajes interpretados, por un lado, ylos lenguajes compilados, por otro.

+omo hemos dicho, AutoCAD provee al usuario de un propio int)rprete deAutoL&'( interno. Este int)rprete, al $ue habría $ue llamarle evaluador , se encarga-precisamente- de evaluar las e%presiones incluidas en el código fuente de unprograma. Estos programas pueden introducirse directamente desde la línea decomandos de AutoCAD, o bien cargarse en memoria a partir de un programacompleto escrito es un archivo de te%to A'+&&. #ichos archivos tendránhabitualmente la e%tensión .LSP.

#e la programación en AutoL&'( hablaremos largo y tendido en este MÓDULO.

Page 2: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 2/39

ONCE.1.1.'. Entorno ADS

A#' * AutoCAD Development System es un entorno de programación el lenguaje +

paraAutoCAD. Las aplicaciones programadas de esta manera han de ser llamadasdesde un propio programa AutoL&'(, ya $ue AutoCAD las considera comofunciones e%ternas.

El código fuente de estas aplicaciones ha de escribirse y compilarse en uncompilador e%terno de +, es decir, AutoCAD no provee de un entorno deprogramación para estas aplicaciones, como ocurre con AutoL&'( o "A. Elprograma objeto ejecutable .EXE *normalmente, producto de la compilación delfuente, podrá ser cargado desde AutoCAD.

NOTA: Este entorno está ya obsoleto en la versión /0 y los programas desarrolladosen )l deberán adaptarse a A12 mediante el entorno A#'12.

 

ONCE.1.1.(. Entorno AR

A12 * AutoCAD Runtime Extension es desde la versión /3 de AutoCAD otroentorno de programación + $ue posibilita, al contrario $ue A#', una comunicacióndirecta de las aplicaciones con AutoCAD. #e esta forma, no es necesaria laintervención de AutoL&'( como intermediario. La aplicación 1ender, en RENDER.ARX,es un ejemplo de programa en este formato.

La no integración de un entorno de programación en + dentro del soft4arede AutoCAD ha hecho $ue su utilización para desarrollar aplicaciones para elprograma no est) muy e%tendida. Es necesario, pues, ad$uirir un compilador de +complementario para poder desarrollar en este lenguaje aplicaciones A#' o A12, lo$ue no ocurre con AutoL&'( o "A. (or este motivo, tampoco se tratará en estecurso.

NOTA: En la versión /0 de AutoCAD e%iste el comando ARX para cargar, descargary obtener información sobre aplicaciones A12 sin necesidad de utilizar AutoL&'(.

 

ONCE.1.1.4. Entorno !"A

"A *Visual BASIC for Appliations es un novedoso entorno, incluido en la versión/0, $ue parece hacer furor entre los programadores ltimamente. La programaciónen isual "A'&+ para 5indo4s viene siendo, desde hace unos a!os, una de lasherramientas más versátiles y, a la vez, más sencillas y utilizadas en el mundo de laprogramación informática. El usuario puede desarrollar sus programas en uncompilador isual "A'&+ e%terno o utilizar el propio módulo "A $ueincluye AutoCAD 14. Este módulo contiene la sinta%is del lenguaje, un depurador yun entorno de desarrollo. Así, el programador, puede programar rutinas "A e irprobándolas en una sesión de AutoCAD mientras se van depurando.

"A será ampliamente tratado en el MÓDULO DOCE .

Page 3: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 3/39

 

ONCE.1.1.). Entorno !i$ua% Li$&

A partir de la ersión /0 e%iste un nuevo entorno de desarrollo denominado isual

Lisp $ue permite realizar aplicaciones en AutoL&'( de una manera más rápida yefectiva. Este entorno proporciona herramientas para desarrollar y depurar lasrutinas y compilarlas como aplicaciones A12. 6ambi)n dispone de su propioevaluador, $ue emula al de AutoL&'(, además de un completo control decodificación y seguridad de las rutinas creadas.

El entorno de isual Lisp es un módulo $ue se carga bajo demanda. 7o estáincluido en el propio ncleo de AutoCAD, como ocurre con el evaluador deAutoL&'(. El nuevo conjunto de funciones incorporadas en isual Lisp permitetrabajar en diferentes áreas y niveles $ue incluyen funciones a!adidas de AutoL&'(,funciones de acceso al sistema operativo y E8' de archivos, funciones de carga yvinculación de objetos y bases de datos, almacenamiento directo de listas en un

archivo de dibujo, acceso al conjunto de objetos Active2 de AutoCAD y tecnologíabasada en 9bjectA12 $ue no necesita la presencia de AutoCAD para su ejecución.

#e esta manera, el entorno de isual Lisp permite a los desarrolladores laprogramación en A12 y Active2.

ONCE.'. CARACTER*STICAS DE AutoLISP

+omo ya hemos dicho, L&'( *!ISt "roessin# es un lenguaje de programación $ue

se remonta a los a!os cincuenta y $ue fue desarrollado para la investigación deinteligencia artificial. La base de su funcionamiento es el manejo de listas, en lugarde datos num)ricos como otros lenguajes. AutoL&'( es una implantación L&'(en AutoCAD.

:na lista es un conjunto de símbolos. El símbolo es la unidad mínima básica de unalista, y puede ser una variable, una función inherente a AutoL&'(, una función deusuario, un dato constante... Las listas elaboradas mediante símbolos sonevaluadas y procesadas para obtener un resultado.

(ara programar en AutoCAD, este lenguaje proporciona una serie de posibilidadescomo la facilidad para manejar objetos heterog)neos *nmeros, caracteres,

funciones, entidades u objetos de dibujo, etc)tera, la facilidad para la interacciónen un proceso de dibujo, la sencillez del lenguaje y su sinta%is, y otras $ue hacende )l una herramienta muy til y sencilla de manejar y aprender.

+omo tambi)n hemos dicho ya, el lenguaje AutoL&'( *y L&'( es un lenguajeevaluado, y no interpretado o compilado. Los lenguajes interpretados son leídospalabra a palabra por el ordenador, al ser introducidas, y cada una de ellasconvertida a lenguaje má$uina. Esto hace $ue sea sencilla su edición y detección deerrores de sinta%is u otros; por el contrario, hace $ue sean muy lentos *ejemplo<=icrosoft >"A'&+. Los códigos de los lenguajes compilados son escritos porcompleto y, antes de su ejecución final, es necesario compilarlos, convirti)ndolosasí en código fuente ejecutable y comprensible por la má$uina. Este tipo de

lenguajes hace $ue su ejecución sea más rápida y pura pero, en contra, resultamás difícil su depuración *ejemplos< =icrosoft >uic?"A'&+ o "orland +@@.

Page 4: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 4/39

Los lenguajes evaluados -AutoL&'(- están a caballo entre unos y otros. 7o sontan rápidos como los compilados pero son más fle%ibles e interactivos $ue estos. Esposible, por ejemplo, construir un programa con AutoL&'( $ue sea capaz demodificarse a sí mismo bajo determinadas circunstancia; )sta es la base de losllamados Sistema Expertos.

El mecanismo evaluador de AutoL&'( es la propia lista< conjunto de símbolosseparados entre sí por, al menos, un espacio blanco y encerrados entre par)ntesis.Esto es, desde el momento $ue e%iste una e%presión encerrada entre par)ntesis,AutoL&'( la evala e intenta ofrecer un resultado.

AutoL&'( es un subconjunto del lenguaje Common !IS" . +omo ha sido dise!adopara trabajar desde AutoCAD, se han seleccionado las características de L&'( másadecuadas para este fin y, además, se han a!adido otras nuevas, sobre todo en lamanipulación de objetos de dibujo, acceso a la "ase de #atos de AutoCAD einteracción gráfica general.

Los programas en AutoL&'( son simples archivos de te%to A'+&&, con la e%tensiónhabitual .LSP. :na vez hecho el programa, habremos de cargarlo desde el propioeditor de dibujo de AutoCAD. 6ambi)n es posible escribir líneas de código AutoL&'(desde la línea de comandos del programa, como veremos en breve.

Es posible la creación de órdenes nuevas $ue llamen a programas en AutoL&'(, asícomo la redefinición de comandos propios de AutoCAD, como porejemplo LINEA o DESPLAZA. (ero una de las más importantes potencialidades deAutoL&'( es el acceso directo a la "ase de #atos interna de AutoCAD. 6oda lainformación de un dibujo, como deberíamos saber, no se guarda como objetos dedibujo en sí, o sea, cuando salvamos un .DWG, en disco no se guardan los círculos,líneas, etc)tera, sino una relación o base de datos donde se dice dónde aparece uncírculo o una línea, con $u) coordenadas de origen y final, con $u) radio odiámetro, tipo de línea, color... (odremos pues desde AutoL&'( acceder a dichabase de datos para modificarla, editarla o para e%portar datos, por ejemplo, a unabase de datos e%terna.

 

ONCE.'.1. Ti&o$ +e o-eto$ # +ato$ enAutoLISP

Atendiendo a sus características podemos definir varios tipos de objetos y datos enAutoL&'(, $ue son los de la tabla siguiente<

O-eto o +ato De$cri&ción

------------------------------------------------------------------------------------------------------------

!ista  9bjeto compuesto de un par)ntesis de aper tura, uno o más elementos separados por, al menos, un espacio en blanco y un par)ntesis de cierre. Los elementos de una lista pueden ser símbolos, valores concretos *constantes num)ricas o cadenas o listas incluidas. (or ejemplo< (DEFUN seno (x) (SETQ xr (* PI(/x 18.))) (SETQ

Page 5: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 5/39

s (SIN xr))), se trata de una lista $uecontiene cinco elemen tos< una función inherente de AutoL&'( DEFUN, un nombre de función de usuario seno, una lista con un nico elemento (x) y dos listas SETQ con tres elementos cada una.

Elemento  +ual$uiera de los componentes de una lista.

S$m%olo  +ual$uier elemento de una lista $ue no sea una constante. (uede ser el nombre de una variable, un nombre de función definida por el usuario o un nombre de función de AutoL&'(.

Enteros  alores num)ricos enteros, sin punto deci mal. &nternamente son nmeros de 3B bits con signo, sin embargo, en la transferencia

de datos con AutoCAD son valores de /C bits con signo, comprendidos por lo tanto entre 3BDC y 3BDCD.

Reales  alores num)ricos con coma flotante de do precisión. Esto representa un mínimo de /0 dígitos representativos. 'e pueden e%presar en notación científica e%ponencialmediante e o E.

Cadenas &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& alores te%tuales $ue contienen cadenasde

caracteres en código A'+&&. #eben ir entre comillas y se permite una longitud má%ima de /3B caracteres. 'e pueden construir cadenas mayores como veremos.

Desriptores de ar'ivo  alores $ue representan un archivo abierto para lectura o escritura.

Nom%res de o%(etos de di%u(o  alores $ue representan el FnombreFhe%ade cimal de un objeto de la "ase de #atos.

Con(untos desi#nados de AutoCAD  alores $ue representan un conjunto dese lección de objetos de dibujo.

)uniones de usuario &&&&&&&&&&&&&&&&&&&&& 'ímbolo $ue representa el nombre de una función definida por el usuario.

)uni*n in'erente o su%rutina &&&&&&&&&&& 'ímbolo con el nombre de una funciónprede finida de AutoL&'(. 'e suelen denominar con la abreviatura inglesa su%rs. (ueden ser in ternas o e%ternas.

 

Page 6: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 6/39

ONCE.'.'. Proce+imiento$ +e e/a%uación

La base de todo int)rprete de L&'( es su algoritmo evaluador. Gste analiza cadalínea de programa y devuelve un valor como resultado. La evaluación sólo serealizará cuando se haya escrito una lista completa y )sta podrá ser cargada desde

un archivo de te%to o tecleada directamente en la línea de comandos de AutoCAD14.

El primer elemento de la lista es comparado con todos los nombres de funcionesinherentes base o su%rs internas de AutoL&'(, con todos los nombresde su%rs e%ternas cargadas desde aplicaciones A#' o A12 y en su caso con todoslos nombres de funciones de usuario cargadas en memoria. 'i el nombre esreconocido, se realiza la evaluación de la e%presión de AutoL&'(. Esta puedeconsistir en asignar un valor a una variable, cargar en memoria una función deusuario, escribir un resultado en pantalla o en un archivo, dibujar un objeto gráfico,etc.

El primer elemento de la lista debe ser por tanto un nombre de función. El resto deelementos se consideran argumentos de dicha función. La evaluación en AutoL&'(se realiza de acuerdo a las siguientes reglas.

Primera0

Las listas se evalan $uedando determinadas por el primer elemento. 'i )ste es unnombre de función inherente o subrutina, los elementos restantes de la lista sonconsiderados como los argumentos de esa función. En caso contrario se consideracomo un nombre de función definida por el usuario, tambi)n con el resto deelementos como argumentos. +uando los elementos de una lista son a su vez otraslistas, )stas se van evaluando desde el nivel de anidación inferior *las listas más

FinterioresF. El valor resultante en cada evaluación de las listas FinterioresF, esutilizado por las listas Fe%terioresF. (or ejemplo<

(SETQ sx (SIN (* PI (/ x 18.))))

La lista más FinteriorF contiene como primer elemento el nombre de la función deAutoL&'( /$ue realiza el cociente o división del siguiente elemento entre losrestantes. La evaluación de dicha lista devuelve el resultado del cociente, en estecaso el valor contenido en la variable xdividido entre el nmero real 18.. #ichovalor es utilizado como elemento en la lista circundante $ue empieza por la funciónde AutoL&'( * $ue realiza una multiplicación o producto. Esta lista se evalaofreciendo como resultado el producto de

PI *3,/0/HI por el valor anterior. A su

vez el resultado interviene como argumento en la lista $ue empieza por la funciónde AutoL&'( SIN, $ue es evaluada obteni)ndose el seno. Este interviene por ltimocomo argumento de la lista más e%terior $ue empieza por la función deAutoL&'( SETQ , cuyo resultado es asignar o almacenar en la variable sx el valor delseno. Este valor es devuelto por la lista de SETQ como resultado final.

Segun+a0

(uesto $ue cada lista contiene un par)ntesis de apertura y otro de cierre, cuandoe%isten listas incluidas en otras, todos los par)ntesis $ue se vayan abriendo debentener sus correspondientes de cierre. 'i se introduce desde el teclado una e%presión

en AutoL&'( a la $ue falta por cerrar algn par)ntesis, se visualiza un mensaje del

Page 7: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 7/39

tipo n! donde n es un nmero $ue indica cuántos par)ntesis faltan por cerrar. 'epueden introducir por teclado esos par)ntesis y subsanar el error. (or ejemplo<

"o#$n%o& (SETQ sx (SIN (* PI (/ x 18.))'! )).'

Tercera0

6ambi)n es posible evaluar directamente un símbolo *e%traer por ejemplo el valoractual contenido en una variable, introduciendo por teclado el signo de cerraradmiración seguido del nombre del símbolo. Esta evaluación se puede producirincluso en mitad de un comando. (or ejemplo, para suministrar como ángulo paraun arco el valor contenido en la variable x, se responde a la solicitudde AutoCAD con +x. (or ejemplo<

"o#$n%o& +sx.'

Cuarta0

Los valores enteros, reales, cadenas de te%to y descriptores de archivos, devuelvensu propio valor como resultado. Los nombres de funciones inherentes o subrutinasde AutoL&'( devuelven un nmero interno he%adecimal *suele cambiar de unasesión de dibujo a otra. (or ejemplo<

+,'. devuelve ,'.+-Ino- devuelve -Ino-

+SETQ devuelve 0S2r& 31$e'4!

uinta0

Los símbolos de variables participan con el valor $ue contienen *$ue les estáasociado en el momento de la evaluación. (or ejemplo<

+x devuelve

+sx devuelve .'

Se2ta0

#eterminadas funciones de AutoL&'( pueden devolver un valor nulo, $ue serepresenta mediante la e%presión n5. (or ejemplo<

"o#$n%o& (PR67PT -en9en%o $ A:oLISP;n-)en9en%o $ A:oLISPn5

La funciónPR67PT

 escribe en la línea de comando el mensaje especificado ydevuelve n5. El código ;n e$uivale a INTR6.

Page 8: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 8/39

 

ONCE.'.(. Arc3i/o$ uente +e &rograma$

Las e%presiones contenidas en un programa de AutoL&'( pueden introducirse

directamente desde el teclado durante la edición de un dibujo de AutoCAD,escribirlas en un fichero de te%to A'+&& o ser suministradas por una variable deltipo cadena, como ya se ha dicho varias veces.

(ara una correcta evaluación, las e%presiones deben cumplir unos re$uisitos desinta%is, $ue se pueden resumir en los siguientes puntos<

- :na e%presión puede ser tan larga como se $uiera. (uede ocupar varias líneasdel archivo de te%to.

- Los nombres de símbolos pueden utilizar todos los caracteres imprimibles *letras,nmeros, signos de puntuación, etc. salvo los prohibidos $ue son< ( ) . < - =

- Los nombres de símbolos no son sensibles a las maysculas.Así, seno y SEN6 representan el mismo nombre. Los nombres pueden contenernmeros, pero no estar formados e%clusivamente por nmeros. Así, 1>:, >:?1, >1' son válidos como nombres de variables, pero no '1, $ue será interpretadocomo un valor num)rico constante.

- Los caracteres $ue terminan un nombre de símbolo o un valor e%plícito *unaconstante num)rica o de te%to son< par)ntesis de apertura y cierre, apóstrofo,comillas, punto y coma, espacio en blanco o final de línea en el archivo. Estoscaracteres sirven de separación entre elementos de una lista.

- Los espacios en blanco de separación entre símbolos son interpretados como unsolo espacio entre cada par de símbolos. 'e recuerda $ue es necesario un espacioen blanco para separar un símbolo del siguiente, siempre $ue no haya par)ntesis,apóstrofo, comillas o punto y coma. #ebido a la longitud de las e%presiones deAutoL&'( y a la profusión de par)ntesis $ue dificultan su lectura, suele ser normahabitual realizar sangrados en las líneas del archivo de te%to, para resaltar lospar)ntesis interiores de los e%teriores. 6odos los espacios a!adidos soninterpretados como uno solo.

-Los valores e%plícitos *constantes de nmeros pueden empezar con elcarácter @ o ? $ue es interpretado como el signo del nmero.

- Los valores de constantes de nmeros reales deben empezar con una cifrasignificativa. El carácter punto *. se interpreta como el punto decimal. 6ambi)n seadmite @ o ? para el signo ye o E para notación e%ponencial o científica. 7o esválida la coma decimal, ni tampoco abreviar como en . *hay $ue escribir ..

- Los valores de constantes con cadenas de te%to son caracteres $ue empiezan yterminan por comillas. #entro de las cadenas se pueden incluir caracteres decontrol mediante la contrabarra *;. Los códigos permitidos son<

;; ?????? +arácter contrabarra *;.

;- ?????? +arácter comillas *-.;e ?????? +arácter de escape.

Page 9: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 9/39

;n ?????? 7ueva línea o retorno de carro.;r ?????? INTR6;: ?????? +arácter de tabulador TA;nnn ?????? +arácter cuyo código octal *no A'+&&, $ue es decimal es nnn.;U@xxxx  ?????? 'ecuencia de caracteres de código +niode.

;7@nxxxx  ??????

'ecuencia de caracteres multibyte. 

Los códigos deben ir en minsculas. (ara incluir en una cadena un código A'+&& hay$ue calcular su valor octal. (or ejemplo, el carácter dólar B es A'+&& 3C; su valoroctal será 00 y en la cadena habrá $ue indicar el código de control ;44.

- El apóstrofo *C se puede utilizar como abreviatura del comando QU6TE. Elcomando QU6TEdevuelve el literal del símbolo. Es decir, cuando en una e%presión unsímbolo aparece precedido por apóstrofo o se le aplica la función deAutoL&'( QU6TE, no se evala con el valor $ue contiene en ese momento sino $uedevuelve el propio nombre literal del símbolo.

- 'e pueden incluir comentarios en un archivo de te%to con programas ye%presiones en AutoL&'(, comenzando la línea del archivo con un punto y coma *=.A partir de donde se encuentre un punto y coma hasta el final de la línea, AutoL&'(considera $ue son comentarios y no los tiene en cuenta. 6ambi)n se pueden incluircomentarios en mitad de una línea u ocupando varias de ellas, si se sitan entre loscaracteres = y =. (or ejemplo<

=Fnn %e es:$%o $:$5 %e5 %2o.(DEFUN nonH1 (x / >:1 >:')(SETQ ren: = #o%os %e reeren$ $:$5#en:e$:9$%os = (GETAR -os#o%e-))...

Los comentarios son tiles tanto para el autor del programa como para futurosusuarios $ue accedan al archivo con el fin de modificarlo. 'uele ser habitual situaral principio del archivo el título, autor y fecha de creación. (osteriormente, unae%plicación general del programa, e%plicaciones particulares de cada funciónintermedia, usos de variables, etc. +omo muchas de las configuraciones de pantallade te%to disponen de un ancho de J columnas, conviene $ue las líneas del archivode te%to no sobrepasen los J caracteres.

 

ONCE.'.4. !aria%e$ &re+eini+a$E%isten unos valores de símbolos de AutoL&'( predefinidos. 'on los siguientes<

• PI. Es el valor del nmero real (&, es decir< 3,/0/HIBCH3HIDI3.

• PAUSE. Es una cadena de te%to $ue consta de un nico carácter contrabarra. 'eutiliza para interrumpir un comando de AutoCAD despu)s de haberlo llamadomediante la función de AutoL&'( "677AND. Esto permite al usuario introducir algndato.

• T. Es el símbolo de True, es decir, cierto o verdadero *valor 1 lógico. 'e utilizapara establecer $ue determinadas condiciones se cumplen.

Page 10: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 10/39

• (or ltimo el valor de nada, vacío o falso * lógico se representa en AutoL&'(por n5. Este valor aparece siempre en minsculas y no es propiamente unsímbolo, ya $ue no está permitido acceder a )l.

 

ONCE.(. PRO5RA6ANDO EN AutoLISP

A partir de ahora vamos a comenzar a ver poco a poco la manera de ir haciendonuestros programas en AutoL&'(. amos a seguir un orden lógico de menor amayor dificultad, por lo $ue la estructura puede llegar a parecer un poco caóticapara alguien $ue conozca el lenguaje. 6ampoco es objetivo de este cursoprofundizar en un m)todo complejo de programación, sino proponer unas basespara comenzar a programar $ue, con imaginación y horas de trabajo, podráconvertirnos en programadores e%pertos de AutoL&'(.

6odo lo visto hasta ahora resulta la parte árida de la programación; parece $ue nosirven de mucho esos conocimientos teóricos mientras no pasemos a la práctica. #ea$uí en adelante podremos ir entendiendo las B primeras secciones deeste MÓDULO y, si algo se $uedó en el tintero o algo hay $ue repetir de todo loe%puesto hasta a$uí, se completará y se e%plicará o repetirá.

+omencemos, pues, con la programación en AutoL&'( para AutoCAD 14.

ONCE.(.1. Con/encione$ +e $inta2i$

Las convenciones utilizadas para las sinta%is en este MÓDULO van a ser lassiguientes<

• 7ombre del comando o función AutoL&'( en maysculas.

• Argumentos en minscula itálica, representados por un nombre mnemot)cnico.

• Argumentos opcionales encerrados entre corchetes itálicos *$ue no han deescribirse.

• (untos suspensivos en itálica indican la posibilidad de indicar más argumentos.

 

ONCE.4. OPERACIONES NU67RICAS 8LÓ5ICAS

E%plicaremos a$uí la manera en $ue se realizan en AutoL&'( las operacionesmatemáticas, de comparación y lógicas. El buen aprendizaje de estás t)cnicas nosserá tremendamente til a la hora de lanzarnos a la programación pura.

 

Page 11: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 11/39

ONCE.4.1. Aritm9tica :$ica

(ara realizar las cuatro operaciones aritm)ticas básicas e%isten cuatro funcionesAutoL&'( $ue son @, ?, * y /, estas se corresponden con la suma, resta,multiplicación y división.

La función de suma tiene la siguiente sinta%is<

(@  [valor1 valor2 valor3...] )

Esto es, primero se indica el nombre de la función, como siempre en AutoL&'(, $ueen este caso es @ y luego los argumentos de la misma, es decir, a$uí los valores delos distintos sumandos.

Esta función devuelve el resultado aditivo de todos los valores num)ricosespecificados como argumentos de la función. (or ejemplo<

(@ 14 1 ')

devolvería el valor 44. (ara hacer la prueba nicamente debemos escribir dichorenglón en la línea de comandos de AutoCAD, pulsar INTR6 y comprobar elresultado.

NOTA: Al introducir el primer carácter de apertura depar)ntesis, AutoCAD reconoce $ue se está escribiendo una e%presión en AutoL&'(,por lo $ue nos permitirá utilizar los espacios necesarios de la sinta%is sin $ue seproduzca un INTR6 cada vez, como es habitual. 1ecordemos $ue todos loselementos de una lista de AutoL&'( han de ir separados por lo menos con un

espacio blanco. (robemos diferentes sinta%is utilizando más espacios, otabuladores, y comprobemos $ue el resultado es el mismo; se interpretan losespacios o tabuladores como un nico carácter de espacio en blanco.

NOTA: Kagamos la prueba de no introducir el par)ntesis final de la lista indicada.+omprobaremos lo e%plicado en la segunda regla de la sección ONCE.2.2.

+on la función @ podemos indicar valores enteros o reales. 'i todos los valores sonenteros el resultado será entero, pero si uno o varios de ellos son reales -o todosellos-, el resultado será real. Esto significa $ue nicamente es necesario introducirun valor real para recibir una respuesta real. (or ejemplo, si introducimos lasiguiente línea en la línea de comandos enAutoCAD<

(@ 14 1 '.)

el resultado será<

44.

o sea, un nmero real.

Esto a$uí parece irrelevante, pero comprenderemos su utilidad al hablar, porejemplo, de la división.

'i indicamos un solo sumando con esta función, el resultado es el valor del propiosumando. (or ejemplo<

Page 12: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 12/39

(@ ')

devuelve<

'

si se escribe la función sin argumentos, el resultado es *función sinargumentos< (@).

Los valores indicados en la función de suma pueden ser directamente valoresnum)ricos o nombres de variables num)ricas declaradas anteriormente, porejemplo<

(@ 1. x :o:$5)

En esta función, 1. es un valor constante real y x y :o:$5 son dos nombres de

variables $ue han debido ser anteriormente declaradas; ya aprenderemos adeclarar variables. 'i la variable no e%istiera se produciría un error bad argumenttype de AutoL&'(.

9tros ejemplos con nmeros negativos<

(@ 1 C') devuelve C1

(@ ?1 C1) devuelve ?'

NOTA: 'i se produce algn error de sinta%is u otro, podemos acudir al final deeste MÓDULOpara ver una relación de los mensajes de error de AutoL&'(.

La función de resta, por su lado, tiene la siguiente sinta%is<

(?  [valor1 valor2 valor3...] )

Esta función devuelve la diferencia del primer valor con todos los demás indicados.Así por ejemplo<

(? 1 )

da como resultado  y la siguiente e%presión<

(? 1 ')

da como resultado . Esto es producto de restar ,- . / 0 /  y, luego, / . 1 0 2; olo $ue es lo mismo ,- . 3/ 4 15 0 2.

Al igual $ue en la suma, si se indican valores enteros el resultado será entero, si seindica uno real *con uno es suficiente el resultado es real, si se indica un solo valorse devuelve el mismo valor y si se escribe la función sin argumentos se devuelve .Así pues, si $ueremos un resultado real efectuado con nmeros enteros paraposteriores operaciones, deberemos indicar uno de los valores entero; de lasiguiente manera, por ejemplo<

(? 1 . ')

Page 13: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 13/39

o cual$uier otra combinación posible de uno o más nmeros enteros.

+omo se ha e%plicado para la suma, los valores de los argumentos para la restapueden ser constantes, eso sí, siempre num)ricas, o variables<

(? :o: n#1 n#')

Llegados a este punto, podemos suponer ya las diferentes combinaciones $uepodremos realizar con las distintas funciones aritm)ticas. (or ejemplo, es factible laevaluación de la siguiente e%presión<

(@ 1' (? ' ?))

cuyo resultado es 11. 9 sea, y como hemos e%plicado, se realizarán las operacionesde dentro a fuera. En este ejemplo, se suma la cantidad de /B a la diferencia B -3, esto es 6 ,1 4 31 . 25 0 ,,. +omo vemos, e%isten dos listas, una interioranidada a la otra $ue es, a la vez, argumento de la lista e%terior. 9curre lo mismo

con nombres de variables<(? er1 (@ ?s#1 s#') '.44)

+on respecto al producto su sinta%is es la siguiente<

(*  [valor1 valor2 valor3...] )

'e evala el producto de todos los valores num)ricos indicados como argumentos.+omo anteriormente, si un valor es real el resultado es real. :n solo valor comoargumento devuelve el mismo valor. 7ingn valor devuelve . eamos un ejemplo<

(* 1' 4 ?1)

El resultado es ?144. eamos otros ejemplos<

(* ' )(* 9$5 (? 9$x 9$%))(? (* 1' ') '4)(@ (? ?1 ?) (* :o:$5 '))

NOTA: 'i escribimos más par)ntesis de los necesarios por la derecha se nosmostrará un mensaje de error. 1ecordar $ue si no los escribimos nos da la opción

de escribirlos despu)s, así como el nmero de ellos $ue faltan. #e todas forma,consltese el final del MÓDULO para la e%plicación de los mensajes de error.

La sinta%is de la división es la $ue sigue<

(/  [valor1 valor2 valor3...] )

La función / realiza el cociente del primer valor num)rico por todos los demás, esdecir, divide el primer nmero por el producto de los demás. (or ejemplo<

(/ 1 ')

da como resultado . el ejemplo siguiente<

Page 14: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 14/39

*8 /JJ H H

da como resultado 4, es decir, ,-- 7 / 0 1- y, luego, 1- 7 / 0 8; o lo $ue es lomismo 6 ,-- 7 3/ 9 /5 0 8.

9tros dos ejemplos<

(/ '4 (* (@ 1. ') 1'))(/ 1' ' 1)

+on respecto al cociente debemos realizar las mismas observaciones anteriores,esto es, si se indica un solo valor se devuelve el mismo valor, si se indica la funciónsin argumentos se devuelve  y si se indican valores enteros sólo se devuelvenvalores enteros. Esto ltimo cobra especial sentido en el caso de las divisiones, ya$ue el cociente entre dos nmeros enteros puede ser un nmero real. eamos elsiguiente ejemplo<

(/ 1 ,)

'i introducimos esta línea el resultado será '. El motivo es $ue, como hemosespecificado valores enteros, el resultado se muestra en forma de nmero entero,con la parte decimal o mantisa truncada. (ara asegurarnos de recibir una respuestacorrecta *con decimales significativos, deberemos introducir uno de los valores -otodos ellos, pero con uno es suficiente- como valor real, de la siguiente forma<

(/ 1 ,.)

Ahora el resultado será '.14'8. El nmero entero podría haber sido el otro<

(/ 1. ,)

Esto debemos tenerlo muy en cuenta a la hora de realizar operaciones cuyoresultado vaya a ser parte integrante de otra operación -o no- $ue puededevolver decimales. emos otros ejemplos de divisiones<

(/ ?1'. ,.8 '1)(/ (@ (? '. ') 1'.) (/ (* (@ 1.1 '.1) 1)))(@ %$:os (/ Jr>o (* 1 ')))

NOTA: Evidentemente, la división por J produce un error de AutoL&'(< divide by

zero.

 

1; a$e interme+ia +e e-ercicio$

• 1ealizar mediante AutoL&'( las siguientes operaciones aritm)ticas *estáne%presadas en notación informática sencilla de una línea<

*HJ @ H 8 B*BJJ M H - 3 8 *0 8 B*/J.B3 - */B.J3 8 3 M */B @ *B M B - **/B.H 8 B M B.CH

Page 15: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 15/39

*/I @ B3 8 */J @ *B3 8 *B3 8 /I**BJ 8 H - / 8 */H.H M **/H.H - / 8 /B

 

ONCE.4.'. 6atem:tica a/an<a+aNuera aparte de las funciones aritm)ticas de nivel básico, programando en AutoL&'(podemos realizar operaciones matemáticas complejas como raíces cuadradas osenos. amos a e%plicar a$uí las funciones $ue controlan estas operaciones.

Las dos primeras $ue veremos son sencillas de entender y utilizar. Ambas serefieren al incremento, positivo o negativo, de una unidad a un valor num)rico.

(1@  valor  )

Esta sinta%is corresponde a la función de incremento positivo de una unidad al valorindicado. Así, si $ueremos incrementar en / el valor HDC, haremos<

(1@ ,)

Esto e$uivale a (@ , 1) pero es de una forma más cómoda; el resultado es ,,.

NOTA: La función se denomina 1@ en sí, por lo $ue no e%iste espacio entre 1 y +.

(odemos realizar estos incrementos con nombres de variable<

(1@ n)

lo $ue incrementará en una unidad el valor de n. Esto puede ser especialmentenecesario para controlar los llamados ontadores&suma en programación, del tipo<

(SETQ s# (1@ s#))

Esto ya lo veremos a la hora de declarar variables.

La siguiente función resta *incremento negativo una unidad al valor num)ricoindicado. E$uivale a (? valor  1), pero de una forma más cómoda.

(1?  valor  )

(or ejemplo<

(1? ')

suyo resultado es 1.

9tros ejemplos de estas dos funciones<

(1? n)

(1? ,.)(1? ?')

Page 16: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 16/39

(1@ ?4.)(1@ (@ :::o: 1)(1? (* ' '))(1? (* (/ ' ') (@ 1 1.)))

(AS  valor  )

Esta función AS devuelve el valor absoluto del nmero indicado o e%presiónindicada. #e esta forma, la siguiente e%presión<

(AS C')

devuelve '.

Las siguientes e%presiones tienen el siguiente efecto indicado<

(AS C'.,8) devuelve '.,8

(AS 4) devuelve 4(AS ) devuelve (AS C1) devuelve 1(AS (/ ' .)) devuelve .,(AS (/ ' ?.)) devuelve .,

(FIX  valor  )

FIX trunca un valor a su parte entera *positiva o negativa, es decir, de un nmeroreal con decimales devuelve nicamente su parte entera. (ero, cuidado, no seproduce redondeo, sólo un truncamiento.

Ejemplos<

(FIX '.,) devuelve '(FIX C1'.4) devuelve C1'(FIX (/ 1 .)) devuelve (FIX (/ 1 C.)) devuelve C

(RE7  valor1 valor2 [valor3...] )

Esta función AutoL&'( devuelve el resto del cociente *módulo de los dos valoresintroducidos en principio. (or ejemplo, la siguiente e%presión devuelve  como

resultado<(RE7 ' ,)

#icho  es el resto $ue resulta de dividir BJ 8 D. 'i aplicamos la regla de la división*dividendo es igual a divisor por cociente más resto< 1- 0 9 1 4 ;, vemos $ue secumple correctamente.

'i se especifican más de dos valores, el resto anterior es dividido entre el actual,devolviendo el nuevo resto de la nueva división. (or ejemplo<

(RE7 ' , 4)

Page 17: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 17/39

da como resultado '. El primer resto  se calcula de la forma e%plicada en elejemplo anterior y, el resultado final ', se produce al dividir dicho primer restoentre el tercer valor 4. Al dividir C 8 0, nos da un resultado *$ue es igual a / y unresto ' *valor final obtenido. así sucesivamente.

9tros ejemplos<(RE7 C1 ')(RE7 ')(RE7 (* ' ') (? (@ 1 1) 4.))(RE7 4 (* ?4))

(asemos ahora a ver las funciones trigonom)tricas, esto es, cómo calcularlasmediante AutoL&'(. La primera sinta%is se refiere al seno de un ángulo y es lasiguiente<

(SIN  ángulo )

La función SIN devuelve el seno de un ángulo e%presado en radianes. Ejemplos<

(SIN 1) devuelve .8414,1(SIN (/ PI ')) devuelve 1.

NOTA: +omo sabemos PI es un constante de AutoL&'(, por lo $ue no hace faltadeclararla como variable; ya tiene valor propio y es .141. An así, se puedecalcular su valor e%acto mediante la e%presión< "I 0 8 9 arta# ,.

("6S  ángulo )

"6S devuelve el coseno de un ángulo e%presado en radianes. Ejemplos<

("6S PI) devuelve C1.("6S (* 4)) devuelve .8484

NOTA: 7ótese $ue (& es un valor real, por lo $ue el resultado será real.

(ATAN  valor1 [valor2] )

Esta función ATAN devuelve el arco cuya tangente es 9$5or1 e%presada en radianes,es decir, realiza el arcotangente de dicho valor. (or ejemplo<

(ATAN 1.) devuelve .8

'i se indica un segundo valor *9$5or', ATAN devuelve el arcotangentede 9$5or1 dividido por9$5or'. Esto permite indicar la razón entre los lados de untriángulo recto, es decir, escribir la tangente directamente como cociente del senoentre el coseno. 'i 9$5or' es , el valor devuelto será igual a (& 8 B o a -(& 8 Bradianes, dependiendo del signo de 9$5or1.

Ejemplos<

(ATAN 1 1)(ATAN 1 (* ' ?4.))

Page 18: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 18/39

Estas son las tres funciones trigonom)tricas de AutoL&'(. En este punto se nosplantean un par de problemas< Ocómo calculo las restantes funcionestrigonom)tricasP y Ocómo convierto grados se%agesimales en radianes y viceversaP

La segunda cuestión es sencilla, ya $ue basta aplicar al fórmula rad 0 #rados 9 "I 7 ,<- para convertir grados en radianes. La operación inversa en fácilmente

deducible.

La primera pregunta tiene una respuesta no menos sencilla, y es $ue en la mayoría-por no decir todos- de los lenguajes de programación nicamente nosproporcionan estas funciones trigonom)tricas básicas y, a partir de ellas, podemoscalcular las funciones trigonom)tricas derivadas inherentes. La manera se e%plica acontinuación mediante notación sencilla de una línea<

=unción +eri/a+a Notación

'ecante *sec % / 8 cos *%+osecante *cosec % / 8 sen *%Arcoseno *arcsen % arctag *% 8 √ */ - % Q BArcocoseno *arccos % /.HDJDC33 - arctag *% 8 √ */ - % Q BArcosecante *arcsec % arctag *√ *% Q B - / @ si#no *% -/ M /.HDJDC33Arcocosecante *arccos % arctag */8 √ *% Q B - / @ si#no *% -/ M /.HDJDC3Arcocotang. *arccotag % /.HDJDC33 - arctag *%

NOTA: El símbolo Q significa e%ponenciación. √ es raíz cuadrada. si#no *% serefiere al signo del valor; si )ste es positivo si#no *% valdrá /, si es negativo valdrá-/ y si es cero valdrá J. 7o debemos preocuparnos ahora por esto, ya $ue

aprenderemos en breve o más adelante -con mayor soltura- a realizare%ponenciaciones, raíces cuadradas y operaciones con signos.

'igamos, pues, ahora con otras diferentes funciones $ue nos ofrece AutoL&'( a lahora de realizar operaciones matemáticas. La siguiente dice referencia a las raícescuadradas; su sinta%is es<

(SQRT  valor  )

Esta función devuelve el resultado de la raíz cuadrada del valor indicado, ya sea unguarismo simple o una e%presión matemática, como siempre. Así por ejemplo,veamos unas e%presiones con sus correspondientes evaluaciones<

(SQRT 4) devuelve '.(SQRT ') devuelve 1.414'(SQRT (* ' )) devuelve .441

La intención de e%traer una raíz cuadrada de un nmero negativo produce elerror function undefined for argument de AutoL&'(.

(or otro lado, la sinta%is para la función e%ponencial es la siguiente<

(EXPT  base exponente )

Page 19: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 19/39

EXPT devuelve el valor de base elevado a exponente. #e esta forma, para elevar Hal cubo *igual a /BH, por ejemplo, escribiremos<

(EXPT )

9tro ejemplo<

(EXPT '. ,.')

#e esta forma, como sabemos, podemos resolver el resto de raíces *cbicas,cuartas, $uintas... e%istentes. a $ue raíz cbica de 3B es lo mismo $ue 3B elevadoa / 8 3, podemos escribir la siguiente e%presión<

(EXPT ' (/ 1 ))

Así tambi)n<

(EXPT ' (/ 1 ))(EXPT 1 (/ (@ ' 4) (? 9' r: sK'))(EXPT (/ 1 '))

NOTA: El intento de e%traer raíces negativas de cual$uier índice producirá el mismoerror e%plicado en SQRT.

 

(EXP  exponente )

Esta función devuelve la constante *nmero e elevada al e%ponente indicado. 'e

corresponde con el antilogaritmo natural. (or ejemplo<

(EXP 1) devuelve '.,18'8

(L6G  valor  )

L6G devuelve el logaritmo neperiano o natural *en base e del valor indicado. (orejemplo<

(L6G 4.) devuelve 1'.

(G"D  valor_entero1 valor_entero2 )

Esta sinta%is se corresponde con la función de AutoL&'( G"D, $ue devuelve elmá%imo comn denominador de los dos valores indicados. Estos valores han de serobligatoriamente enteros, de no ser así, AutoL&'( devuelve bad argument

type como mensaje de error. eamos unos ejemplos<

(G"D 4 8) devuelve (G"D 8 ,) devuelve 1(G"D (* 1 1) (/ , ')) devuelve 

'i se indica un entero negativo el mensaje de error de AutoL&'( es improper

argument.

Page 20: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 20/39

Las dos ltimas funciones matemáticas $ue veremos pueden sernos de gran ayudaa la hora de programar. :na de ellas *7AX devuelve el mayor de todos los nmerosindicados en la lista. 'u sinta%is es<

(7AX  valor1 valor2... )

Los valores pueden ser nmeros enteros o reales, y tambi)n e%presionesmatemáticoaritm)ticas. Así por ejemplo<

(7AX ,8.4 C1' ,8 ,)

devolverá ,8., ya $ue es el nmero mayor. Lo devuelve como real por laaparición de decimales en el elemento ,8.4. +omo sabemos, con la sola apariciónde un valor real en una lista, el resultado es real.

'i el elemento mayor de la lista es un e%presión matemática, se devolverá su

resultado, no la e%presión en sí, por ejemplo<(7AX (* 1 1) )

devolverá 1 como resultado */J M /J.

9tro ejemplo<

(7AX C C, C)

devolverá C.

(7IN  valor1 valor2... )

La función 7IN, por su lado, devuelve el menor de todos los valores indicados enlista. Las demás consideraciones son análogas a la función anterior. Ejemplos<

(7IN 1 ' 4 ,) devuelve 1(7IN '. , ) devuelve .(7IN (/ , ) .) devuelve .

Ejemplos de 7AX y 7IN con variables<

(7IN x M)(7IN (@ x1 x') (@ 1 ') (@ K1 K') (@ M1 M'))

hasta a$uí todas las funciones $ue tienen $ue ver con operaciones matemáticas.(asaremos, tras unos ejercicios propuestos, a ver las operaciones de comparación,muy interesantes y sencillas de comprender.

 

'; a$e interme+ia +e e-ercicio$

Page 21: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 21/39

• 1ealizar mediante AutoL&'( las siguientes operaciones matemáticas *estáne%presadas en notación sencilla de una línea<

√ **BJ - 3 M * - B/ @ D. @ **D. Q B 8 B @ **D. Q 3 8 3*sen *√ *J M B.JJB - cos *(& 8 B 8 *(& - */ 8 B

arccos */JJ 8 B*/B0.CHI M *e Q B.3 8 *D M √ Bln *0H M *D 8 B*B3.JJI 8 D.D03 Q *HC.JJ/B3 - /

• 1ealícense ejercicios de cálculo de valores mayores y menores de listas, así comode má%imos comunes denominadores.

• 1ealizar un par de ejercicios de incremento y decremento de una unidad avalores.

NOTA: Las operaciones en general siguen en AutoL&'( la jerar$uía de lasoperaciones matemáticas< par)ntesis internos, par)ntesis e%ternos, operadoresunitarios *signos, potenciación, multiplicación y división, suma y resta, operadoresrelacionales *mayor $ue, menor $ue... y operadores lógicos *álgebra de "oole. cuando e%isten varios operadores en el mismo nivel, se ejecutan de iz$uierda aderecha. Ahora mismo veremos operadores relacionales o de comparación y, luego,el álgebra de "oole en AutoL&'(.

 

ONCE.4.(. O&eracione$ re%aciona%e$

Las funciones $ue veremos a continuación se denominan relacionales o decomparación, y es $ue comparan valores, ya sean num)ricos o te%tuales *cadenasemitiendo un resultado verdadero o falso, segn la comparación. Estas funcionesson conocidas por todos *igual, mayor $ue, menor o igual $ue..., sólo $uedadeterminar cómo se utilizan y cuál es su sinta%is en AutoL&'(.

+omo hemos dicho el resultado de la evaluación solo puede ser uno dedos< T *6rue $ue representa el verdadero o cierto, o n5 $ue representa el falso onulo.

NOTA: +on la devolución n5 por parte de AutoL&'( nos empezamos a familiarizar

ahora y la veremos muchas veces.

+omencemos por el igual o igual $ue, cuya sinta%is es la siguiente<

(  valor1 [valor2...] )

La función  compara todos los valores especificados -uno como mínimo-,devolviendo T si son todos iguales o n5 si encuentra alguno diferente. Los valorespueden ser nmeros, cadenas o variables *num)ricas o alfanum)ricas. Así porejemplo<

( )devuelve

 T( .) devuelve T( , 4) devuelve n5

Page 22: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 22/39

( 8,. 8,. 8,.) devuelve T( 4 4 C4 4) devuelve n5

eamos ahora algn ejemplo con cadenas<

( -Oo5$- -Oo5$-) devuelve T( -$s$- -As$-) devuelve n5( -- -- -- --) devuelve T( -Oo5$ $Oor$- -Oo5$ $Oor$-) devuelve n5

NOTA: 7ótese, como adelanto, $ue las cadenas literales han de ir encerradas entrecomillas, como en casi todos los lenguajes de programación.

+on variables declaradas, $ue ya veremos, sería de la misma forma. 'i sólo se

indica un valor en la lista, AutoL&'( devuelve T.

NOTA: Kay $ue tener en cuenta $ue esta función sólo compara valores y no listas oe%presiones. 'i, por ejemplo, se tienen dos variables >:1 y >:' con dos puntos $ueson listas de tres elementos *una coordenada 2, una coordenada y unacoordenada R, para comparar la igualdad de ambos habría $ue recurrir a unafunción lógica como EQUAL, $ue veremos un poco más adelante.

(/  valor1 [valor2...] )

 

Esta función / *distinto o desigual $ue devuelve T si alguno o algunos de losvalores comparados de la lista son diferentes o distintos de los demás, por ejemploen los siguientes casos<

(/ ' )(/ -:ex:o- -:ex:os-)(/ (* ' ') (* ' 4) (* ' )

#evuelve n5 si todos los valores son iguales, por ejemplo<

(/ -$s$- -$s$- -$s$-)

(/ -1 ' - -1 ' - -1 ' - -1 ' - -1 ' -)(/ ' ' ' ')(/ (* 1 1) (* ' 4))

'i nicamente se indica un valor, AutoL&'( devuelve T.

(0  valor1 [valor2...] )

Esta sinta%is se corresponde con la comparación menor $ue. Es una funciónAutoL&'( $ue devuelve T si efectivamente el primer valor comparado es menor $ueel segundo. 'i e%isten diversos valores, cada uno ha de ser menor $ue el siguientepara $ue AutoL&'( devuelva T. 'i no se devuelve n5. eamos algunos ejemplos<

Page 23: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 23/39

(0 ' ) devuelve T(0 4 8 1) devuelve T(0 C4 ) devuelve n5(0 (* ' ') (/ )) devuelve n5

En el caso de cadenas o variables alfanum)ricas *las $ue contienen cadenas, lacomparación se efecta segn el valor de los códigos A'+&&. (or lo tanto, será elorden alfab)tico ascendente *de la A a la R la manera de considerar de menor amayor los caracteres, teniendo en cuenta $ue el espacio blanco es el carácter demenor valor y $ue las letras maysculas son de menor valor $ue las minsculas.Ejemplos<

(0 -$- -2-) devuelve T(0 -M- -O-) devuelve n5(0 -A- -$- -2-) devuelve T(0 -- -S-) devuelve n5

'i las cadenas tienen más caracteres se comparan de la misma forma<

(0 -$2- -$2%-) devuelve T(0 -$2- -$2-) devuelve n5

7o es posible comparar cadenas literales con nmeros; AutoL&'( devuelve unmensaje de error $ue dice 2$% $rJ#en: :>e. +on variables $ue contienenvalores num)ricos o literales se realizaría de la misma manera<

(0 9$5or1 9$5or' :o:$5)(0 ?1' C, # Ors)(0 $:or1 $:or' $:or $:o4 $:or)

(0  valor1 [valor2...] )

Esta es la función menor o igual $ue. Nunciona de la misma forma $ue la anteriorpero teniendo en cuenta $ue devolverá T si cada valor es menor o igual $ue elanterior. 'i no devolverá n5. Ke a$uí unos ejemplos<

(0 1 4 ) devuelve T(0 1'.' 1'.' 14) devuelve T(0 , , ) devuelve n5

Las demás consideraciones son id)nticas a las de la función precedente.

(!  valor1 [valor2...] )

Al igual $ue en la comparación de menor $ue, pero de manera inversa, esta funcióndevuelve Tsi cada valor especificado, sea num)rico sea cadena, es mayor $ue elsiguiente, esto es, si se encuentran ordenados de mayor a menor. 'i nodevuelve n5. (or ejemplo<

(! 1 4. C') devuelve T(! -M- -JO- -$2-) devuelve T(! ' 4) devuelve n5

Page 24: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 24/39

9tros ejemplos<

(! s$5%o %9%)(! >>5$n:$ >>so >2er:$)

(!  valor1 [valor2...] )

'imilar a los anteriores, establece la comparación mayor o igual $ue. 'edevolverá T si y sólo si cada valor es mayor o igual $ue el $ue le sucede, si no, n5.Las demás consideraciones son id)nticas a las otras funciones similares e%plicadas.Ejemplos<

(! ' ' 1' 1' 4) devuelve n5(! '4 '4 '4 ' ' .1 C) devuelve T

 

(; a$e interme+ia +e e-ercicio$

• &ndicar el resultado de AutoL&'( *T o n5 ante las siguientes proposiciones<

( ' '.)( 48. (* 8))( -A:oLISP- -$:o5s>- -$U:65IsP-)(/ (/ , ') (/ ' ,))(/ -52ro- -52ro -)(0 (@ C,))(0 -A- -A- -2- -M- -M-)

(! -oOe- -#es$-)(! -oOe- -oOe:o-)(! -oO- -oOe- -oOe- -oO$-)(! -- -- -$-)

ONCE.4.4. O&eracione$ %ógica$

Además de lo estudiado hasta ahora, e%isten cuatro operaciones lógicas referidas alálgebra de "oole. Estas operaciones son el =  lógico, el O lógico, la identidad y

el NO lógico. Además, e%iste una $uinta función $ue veremos al final denominadade identidad de e%presiones y $ue es un poco especial.

Las cuatro funciones $ue vamos a ver actan como operadores lógicos y devuelven,al igual $ue las anteriores, nicamente los resultados T *cierto o n5 *falso.

(AND  expresin1 [expresin2...] )

Esta función realiza el =  lógico de una serie de e%presiones indicadas $uerepresentan otras tantas condiciones. Esto significa $ue evala todas lase%presiones y devuelve T si ninguna de ellas es n5. En el momento en $ue alguna

es n5, abandona la evaluación de las demás y devuelve n5. Es decir, se debencumplir todas y cada una de las condiciones. eamos un ejemplo<

Page 25: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 25/39

(AND (0 1 1) (! 1 1)) devuelve T

Esto significa $ue, si se cumple la condición de la primera lista (0 1 1) y,además, se cumple la de la segunda lista (! 1 1) devolverá T. +omo esto esasí, devuelve T.

#e otra forma, si una de las condiciones no se cumple, devuelve n5, por ejemploen el siguiente caso<

(AND ( 1 1) (! 1 1))

La primera condición en verdadera */J es igual a /J, pero la segunda es falsa */Jno es mayor $ue /J. +omo una ya no se cumple se devuelve n5. Kan decumplirse todas las condiciones para $ue sea el resultado verdadero. eamos otrosdos ejemplos<

(AND ( 1 1) (! ' ''.) (/ -$#n- -$#one:$-)) devuelve T(AND (0 -A- -$-) ( ,)) devuelve n5

7o tiene mucho sentido indicar una sola e%presión con esta función. Las dossiguientes son id)nticas y producen el mismo resultado<

(AND ( ' ?'))( ' ?')

Ambas devuelven n5.

(6R  expresin1 [expresin2...] )

1ealiza un O lógico de una serie de e%presiones $ue representan otras tantascondiciones. Evala las e%presiones y devuelve n5 si todas ellas son n5. En elmomento en $ue encuentre una respuesta distinta de n5, abandona la evaluacióny devuelve T. Gsta es precisamente la mecánica del O lógico, es decir, basta $ue secumpla una de las condiciones para $ue la respuesta sea verdadera o cierta.

El siguiente ejemplo compara nmeros y devuelve n5<

(6R (0 ' ') (! ' '))

9 sea, si es menor BJ $ue B -$ue no lo es- o si es mayor BJ $ue dos -$ue sí loes-, devuelve T. El cumplirse una de las dos condiciones es condición suficientepara $ue devuelva T. eamos otro ejemplo<

(6R ( ' ') (! ' ')) devuelve n5

En este caso ninguna de las dos condiciones se cumplen *ambas son n5, así $ueel resultado final será n5.

+omo en el caso de la función AND, no tiene sentido utilizar una sola e%presión, ya$ue el resultado sería el mismo $ue al escribirla sola. eamos otros ejemplos<

Page 26: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 26/39

(6R (! ' C) (0 ? C C4 )) devuelve T(6R (0 (* ' 8) (* ' )) ( (/ 8 ') (* 4 1))) devuelve T(6R ( -$rro- -$rre:$-) ( -$s$- -$se:$-) ( ' ) devuelve n5

1ecapitulando, y para afianzar estos dos ltimos conocimientos, decir$ue

AND obliga a $ue se cumplan todas las condiciones para devolver

T. 'in

embargo, a 6R le basta con $ue una de ellas se cumpla para devolver T. #igamos,en lenguaje colo$uial, $ue AND es Fsi se cumple esto, yesto, y esto, y... es válidoF,y 6R es Fsi se cumple esto, o esto, o esto, o... es válidoF.

eamos ahora otra función lógica para comparar e%presiones. 'e llama EQUAL y susinta%is es la siguiente<

(EQUAL  expresin1 expresin2 [aproximacin] )

Esta función compara las dos e%presiones indicadas, si son id)nticas devuelve T, sidifieren en algo devuelve n5.

A primera vista puede parecer igual a la función  *igual $ue estudiada, sinembargo, )sta nicamente comparaba valores; EQUAL tiene la capacidad de podercomparar cual$uier e%presión o lista de e%presiones. #e esta forma, podemosutilizar EQUAL de la misma forma $ue , así<

(EQUAL ' ') devuelve T(EQUAL C ) devuelve n5

(ero no tiene mucho sentido, ya $ue tenemos la función .1eservaremos EQUAL para lo e%puesto, es decir, para la comparación de listas de

e%presiones.

Así pues, y adelantándonos a algo $ue veremos un poco más tarde, diremos $ue lae%presión de las coordenadas de un punto 3# se escribiría de la siguiente forma<

C(' ' 1)

El apóstrofo es la abreviatura de la función QU6TE de AutoL&'(, $ue toma comoliterales, y sin evaluar, las e%presiones $ue le siguen. #e esta forma, para compararla identidad de dos puntos haríamos, por ejemplo<

(EQUAL C(' ' 1) C(' ' 1)) devuelve T

(EQUAL C(' C 1) C(' ' 1)) devuelve n5

NOTA: La función QU6TE se ve ampliada en la sección ONCE.5.1.

El argumento optativo aproximacin se utiliza cuando se comparan e%presionescuyos resultados son nmeros reales y puede haber una pe$ue!a diferenciadecimal $ue no $ueramos considerar desigual. +on este argumento suministramosa la función un valor de apro%imación decimal respecto al cual se creerán igualeslos resultados. (or ejemplo<

(EQUAL '.14, '.148) devuelve n5(EQUAL '.14, '.148 .1) devuelve T

Page 27: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 27/39

(N6T  expresin )

La función N6T devuelve el NO lógico, es decir, si algo es verdadero devuelve falso yviceversa. Así, cuando el resultado sea distinto de n5 *T, devolverá n5; cuandoel resultado sea n5, devolverá T. (or ejemplo<

(N6T ( ' ')) devuelve n5(N6T (/ ' ')) devuelve T

(EQ  expresin1 expresin2 )

Esta función no es propiamente lógica, sino $ue se denomina de identidad dee%presiones. An así, la introducimos en este apartado por su similitud con lasanteriores.

EQ compara las dos e%presiones *sólo dos y ambas obligatorias indicadas ydevuelve T si ambas son id)nticas o n5 en caso contrario. 'e utiliza sobre todo

para comparar listas y ver si hay igualdad estructural.

La diferencia de EQ con EQUAL es $ue )sta ltima compara los resultados de evaluarlas e%presiones, mientras $ue EQ compara la identidad estructural de lase%presiones sin evaluar. (or ejemplo, y adelantando la función SETQ $ue enseguidaveremos, podemos hacer lo siguiente<

(SETQ 5s:1 C(x M))(SETQ 5s:' C(x M))(SETQ 5s: 5s:')

(EQ 5s:1 5s:') devuelve T(EQ 5s:' 5s:) devuelve n5

'e observa $ue 5s:1 y 5s:' son e%actamente la misma lista por definición, estándeclaradas con SETQ y por separado, siendo sus elementos iguales. (ero 5s: es,por definición, igual a5s:' y no a 5s:, aun$ue sus elementos sean iguales. Espor ello $ue, en la segunda evaluación, EQ devuelve n5.

NOTA: +omprenderemos enseguida el funcionamiento y base de la función SETQ, nohay preocuparse.

 

4; a$e interme+ia +e e-ercicio$• &ndicar el resultado de AutoL&'( *T o n5 ante las siguientes proposiciones<

(AND ( (* ' ') (/ 8 ')) (! ' ))(AND (! -$- -$-) (!-M- -$-) (! - - - -) (! -- --))(AND (6R ( ' ') (! )) (6R ( , ) ( )))(EQUAL (AND ( 1 1) ( 1 1)) (6R (! ' 1 ) (0 C')))(6R (AND ( 1 1) ( '. ')) (6R (N6T ( 1 1)) ( '. ')))

NOTA: Apr)ciese la capacidad de poder anidar y combinar e%presiones.

hasta a$uí llega esta parte de funciones matemáticas, lógicas y de comparación.(robablemente el lector estará pensando $ue de poco sirve lo e%puesto hasta

Page 28: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 28/39

ahora< $u) más dará $ue una e%presión matemática me d) un resultado si luego nopuedo operar con )l; $ue importará $ue una proposición lógica medevuelva T o n5 si no me sirve para otra cosa.

(aciencia... En el mundo de la programación hay $ue empezar desde abajo y,aseguramos $ue un buen dominio abstracto de lo visto hasta ahora proporcionaráun gran nivel de soltura a la hora de programar de verdad. 'eguramente, además,a$uella persona $ue sepa programar en algn lenguaje e%istente, habrácomprendido algo más -ya $ue todos son muy parecidos-. El neófito comenzará aver las cosas claras inmediatamente.

A partir de la siguiente sección comenzaremos a ver para $u) sirve todo esto ycómo utilizarlo prácticamente en programas propios.

 Autor: Jonathan Préstamo Rodríguez. Para: La Web del Programador.

http://www.lawebdelprogramador.com/cursos/autocad/once_1.php

elocidad de ejecución para lenguajes depersonalización de Auto+A#

Actualmente Auto+A# permite su personalización mediantecuatro lenguajes de programación $ue pueden ser usadospara realizar desde tareas simples, repetitivas y con mucha

frecuencia tediosas, hasta complejas aplicacionesespecializadas en cual$uier campo del dise!o gráfico asistidopor computadora.

Estos cuatro lenguajes incluyen AutoL&'(, isual L&'(, isual"asic *"A y +@@ *9bjectA1289bject#"2. isual Lisp es elhermano mayor de AutoLisp y aun$ue podemos decir $ueengloba a AutoL&'( prefiero tratarlos como lenguajesseparados y entender isual L&'( como el lenguaje AutoL&'(con e%tensiones Active2 *u 9LE, $ue es lo mismo.

7inguno de estos cuatro lenguajes es mejor ni peor $ue otro,sencillamente son adecuados o no para la realización de unatarea concreta. 7o obstante, personalmente la velocidad deejecución de los algoritmos $ue implemento es una cuestión$ue me preocupa mucho. aun$ue influye mucho más sobreel rendimiento la forma de implementar, el propio dise!o dellenguaje tambi)n tiene un peso específico considerable.

+on el fin de comparar la velocidad de ejecución de estoscuatro lenguajes he preparado una sencilla prueba $ue

Page 29: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 29/39

permita realizar esta comparación. Aun$ue ya supongocualitativamente los resultados de la prueba, tengo curiosidadpor cuantificarlos. (or ello he preparado la siguiente prueba.

Ejecutar una rutina $ue dibuje un nmero determinado decírculos conc)ntricos y al finalizar muestre su tiempo deejecución. Este sería más o menos su pseudo*di#o <

non D2$"r5o(en:ro r$%o)

A$%eEn:%$%"r5o$57o%e5oEs>$o(en:ro r$%o)V

non onr()

so5:$re>e:ones(n)

:o#$:e#>on$5()

re>:e n

D2$"r5o(en:ro r$%o)

r$%o r$%o @ .1

V

:o#$:e#>on$5()

>resen:$:e#>oeeon()V

Ke intentado implementar las rutinas en los cuatro lenguajesen la forma en $ue se parezcan lo má%imo posible sin alterarla metodología de programación inherente a cada uno de loslenguajes de programación bajo Auto+A#. >uizás se podríanoptimizar algunas rutinas metiendo algunos par'es paraevitar ciertas llamadas, etc. pero entonces creo $ue la pruebano tendría sentido. (or ello he intentado respetar lo má%imo

posible las%uenas formas de programación para todas lasrutinas y sus respectivos lenguajes en los $ue han sidoimplementadas.

La prueba consta de cinco programas $ue corresponden conlo siguiente <

• L'( < programa en AutoL&'(. +omando < onirlsp

• NA' < programa en AutoL&'( compilado con isual L&'(.+omando < onirfas

Page 30: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 30/39

• L2 < programa en AutoL&'( con las e%tensiones Active2de isual L&'(. +omando < onirvlx 

• "A < programa en isual "asic *"A.

=acro < onirVBA

• A12 < programa en +@@ *9bjectA12.+omando < onirarx 

Los fuentes y los programas compilados se adjuntan en unarchivo. A$uí coloco las partes principales de cada uno deellos <

AutoL&'( *L'( y isual L&'( *NA'

(%en D2$"r5o (en:ro r$%o)

=re$r 5$ ne9$ en:%$% r5e(en:#$e (5s: <( . -"IR"LE-) (ons 1 en:ro) (ons 4

r$%o))))

(%en &onr5s> ( / en:ro r$%o n : : :e#>o)

=#ens$e %e onso5$(>rn -;nPre2$ %e 9e5o%$% LSP.;n-)

=n$5M$r 5$s 9$r$25es(se:Y en:ro (5s: ))(se:Y r$%o 1.)

=so5:$r e5 n#ero %e re>e:ones(se:Y n (Je:n: -;nN#ero %e re>e:ones & -))

( (or ( n n5) (0 n )) (se:Y n 1))

(>rn -;nRe$5M$n%o 5$ >re2$ >$r$ -)(>rn n)(>rn - re>e:ones ...;n-)

=:o#$r e5 :e#>o n$5(se:Y : (Je:9$r -DATE-))

=re>e:r n 9ees ...(re>e$: n

(D2$"r5o en:ro r$%o)

(se:Y r$%o (@ r$%o .1)))

=:o#$r e5 :e#>o n$5(se:Y : (Je:9$r -DATE-))

=#os:r$r 5os #5seJn%os

Page 31: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 31/39

(se:Y :e#>o (* (? : :) 84))

(>rn -;nTe#>o %e een %e 5$ >re2$ -)(>rn (x :e#>o))(>rn - #s on -)(>rn n)

(>rn - re>e:ones.-)

(>rn))

isual L&'( *L2

(%en D2$"r5oLX (en:ro r$%o)

=$$%r 5$ ne9$ en:%$% r5e $ 5$ 2$se %e %$:os %e A:o"AD  (95$?$%%"r5e *76DELSPA"E* (95$x?D?>on: en:ro) r$%o))

(%en &onr95x ( / en:ro r$%o n : : :e#>o)

  =$>:r$r 5os errores  (%en *error* (#sJ)

  (se:Y *error* n5)

  =52er$r  (se:Y *76DELSPA"E* n5)

  (>rn #sJ))

 

=#ens$e %e onso5$(>rn -;nPre2$ %e 9e5o%$% LX.;n-)

  =$rJ$r 5$s nones ex:en%%$s %e A:oLISP(95?5o$%?o#)

=o2:ener n >n:ero $5 #o%e5o es>$o %e5 %o#en:o $:9o(se:Y *76DELSPA"E* (95$?Je:?7o%e5S>$e (95$?Je:?A:9eDo#en:

(95$x?Je:?A$%?62e:))))

=n$5M$r 5$s 9$r$25es(se:Y en:ro (5s: ))(se:Y r$%o 1.)

  =:o#$r e5 n#ero %e re>e:ones(se:Y n (Je:n: -;nN#ero %e re>e:ones & -))

( (or ( n n5) (0 n )) (se:Y n 1))

(>rn -;nRe$5M$n%o 5$ >re2$ >$r$ -)(>rn n)(>rn - re>e:ones ...;n-)

=:o#$r e5 :e#>o n$5(se:Y : (Je:9$r -DATE-))

=re>e:r n 9ees ...(re>e$: n

Page 32: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 32/39

(D2$"r5oLX en:ro r$%o)

(se:Y r$%o (@ r$%o .1)))

=:o#$r e5 :e#>o n$5

(se:Y : (Je:9$r -DATE-))

=#os:r$r 5os #5seJn%os(se:Y :e#>o (* (? : :) 84))

(>rn -;nTe#>o %e een %e 5$ >re2$ -)(>rn (x :e#>o))(>rn - #s on -)(>rn n)(>rn - re>e:ones.-)

  =52er$r  (se:Y *76DELSPA"E* n5)

  (>rn))

isual "asic *"A

6>:on Ex>5:<P25 S2 D2$"r5o(Re en:ro As APon: H  Re r$%o As Do25e)  <  6n Error Res#e Nex:  <

  D# en:erPon:( To ') As Do25e  <  </* >re>$r$r 5$ #$:rM */  W:O en:ro  <  en:erPon:() .X  en:erPon:(1) .[  en:erPon:(') .Z  <  En% W:O  <  </* s$re#os 9n5$n :e#>r$n$ >$r$ o>:#M$r  < 5$ 9e5o%$% %e een */

  D# o2"r5e As A$%"r5e  <  Se: o2"r5e TOsDr$KnJ.7o%e5S>$e.A%%"r5e(en:erPon:r$%o)  <En% S2<P25 S2 onrA()  <  6n Error Res#e Nex:  <  D# en:ro As NeK APon:  D# r$%o As Do25e

  D# n As In:eJer  D# : As Do25e  D# : As Do25e

Page 33: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 33/39

  D# As In:eJer  D# :e#>o As Do25e  D# >ro#>:S:r As S:rnJ  <  </* #ens$e %e onso5$ */  A:9eDo#en:.U:5:.Pro#>: (92"rL \ -Pre2$ %e 9e5o%$%

A.-)  <  </* n$5M$r 5$s 9$r$25es */  <  W:O en:ro  <  .X 3  .[ 3  .Z 3  <  En% W:O  <  r$%o 13

  <  </* so5:$r e5 n#ero %e re>e:ones */  <  Err."5e$r  <  n A:9eDo#en:.U:5:.Ge:In:eJer(92"rL \ -N#ero %ere>e:ones & -)  <  </* OeYe$r s se $ne5 */  I (Err.N#2er ?'14,',) TOen  <  A:9eDo#en:.U:5:.Pro#>: (-*"$ne5*- \ 92"rL)  <  Ex: S2  <  En% I  <  I (n 0 ) TOen  <  n 1  <  En% I  <  A:9eDo#en:.U:5:.Pro#>: (92"rL \ -Re$5M$n%o 5$ >re2$ >$r$- \ H  n \ - re>e:ones ...- \ 92"rL)  <  </* :o#$r e5 :e#>o n$5 */  : A:9eDo#en:.Ge:$r$25e(-DATE-)  <  </* re>e:r n 9ees ... */  For 1 To n  <  "$55 D2$"r5o(en:ro r$%o)  <  r$%o r$%o @ .1  <  Nex:   <  </* :o#$r e5 :e#>o n$5 */

  : A:9eDo#en:.Ge:$r$25e(-DATE-)  <

Page 34: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 34/39

  </* $55$r 5os #5seJn%os */  :e#>o (: ? :) * 843  <  >ro#>:S:r 92"rL \ -Te#>o %e een %e 5$ >re2$ - \ H  "LnJ(:e#>o) \ - #s on - \ n \ - re>e:ones.- \92"rL

  <  A:9eDo#en:.U:5:.Pro#>: >ro#>:S:r  <  </* 52er$r */  <  Se: en:ro No:OnJ  <En% S2

+@@ *9bjectA12

A$%&&ErrorS:$:s $>>en%En::To7o%e5S>$e5oT$25eReor%(AD2En::*>En:: AD262e:I%\ ID)

A$%&&ErrorS:$:s es=AD25oT$25e *>5oT$25e=

// o2:ener n >n:ero $ 5$ 5oT$25eReor% 7o%e5o Es>$oes $%2os:A>>5$:onSer9es()?!KornJD$:$2$se()

?!Je:S#2o5T$25e(>5oT$25e AD2&&ForRe$%)=

(es + A$%&&e6)re:rn es=

AD25oT$25eReor% *>5oT$25eReor%=

es >5oT$25e?!Je:A:(A"DH76DELHSPA"E >5oT$25eReor%AD2&&ForWr:e)=

>5oT$25e?!5ose()=

(es + A$%&&e6)re:rn es=

// $$%r 5$ en:%$% $ 5$ 5oT$25eReor%es >5oT$25eReor%?!$>>en%AD2En::(ID >En::)=

// se err$ 5$ en:%$%>En::?!5ose()=

>5oT$25eReor%?!5ose()=

re:rn es=V

9o% D2$"r5o(AGePon:% \en:ro %o25e \r$%o)

AD2"r5e *>"r5e=AGee:or% nor#$5(. . 1.)=

// re$r 5$ ne9$ en:%$% r5e ...

:r>"r5e neK AD2"r5e(en:ro nor#$5 r$%o)=

Page 35: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 35/39

V

$:O(ons: s:%&&2$%H$55o\)

$%2F$5(-;nError %e $sJn$n %e #e#or$D2$"r5o.-)=

re:rn=V

AD262e:I% ID=

// ... $$%r5$ $ 5$ 2$se %e %$:os %e A:o"AD

($>>en%En::To7o%e5S>$e5oT$25eReor%((AD2En::*)>"r5e ID) +A$%&&e6)

(>"r5e)

%e5e:e >"r5e=V

$%2F$5(-;nError $5 $$%r 5$ en:%$% $ 5$ $se %eD$:os D2$"r5o.-)=

re:rn=V

re:rn=V

// TOs s o##$n% <"6N"IRARX<9o% TPLDPre2$sonr$rx()

// #ens$e %e onso5$$:Prn:(-;nPre2$ %e 9e5o%$% ARX.;n-)=

// n$5M$r 5$s 9$r$25esAGePon:% en:ro( )=%o25e r$%o 1.=

// so5:$r e5 n#ero %e re>e:ones

n: n=

($e%Ge:In:(-;nN#ero %e re>e:ones & - \n) RT"AN)

$:Prn:(-*"$ne5*;n-)=re:rn=

V

(n 0 )

n 1=V

$:Prn:(-;nRe$5M$n%o 5$ >re2$ >$r$ ]% re>e:ones ...-n)=

// :o#$r e5 :e#>o n$5

Page 36: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 36/39

s:r: res2 r2=

($e%Ge:$r(-DATE- \r2) + RTN6R7)

$%2F$5(-;nError $5 :o#$r 5$ 9$r$25e %e Ss:e#$DATE.-)=

V

%o25e : s:$:H$s:0%o25e!(r2.res9$5.rre$5)=

// re>e:r n 9ees ...or (n: = 0 n= @@)

D2$"r5o(en:ro r$%o)=

r$%o @ .1=V

// :o#$r e5 :e#>o n$5

($e%Ge:$r(-DATE- \r2) + RTN6R7)

$%2F$5(-;nError $5 :o#$r 5$ 9$r$25e %e Ss:e#$DATE.-)=

V

%o25e : s:$:H$s:0%o25e!(r2.res9$5.rre$5)=

// #os:r$r 5os #5seJn%os

%o25e :e#>o (: ? :) * 84=

$:Prn:(-;nTe#>o %e een %e 5$ >re2$ ]. #s on]% re>e:ones.- :e#>o n)=

re:rn=V

6abla de resultados

(ues a$uí está el resultado de la prueba hecho con un (0 a/.DSKz con BHC=" de 1A= y bajo Auto+A# BJJJ. Antes depresentar la tabla he de decir $ue personalmente me

esperaba lo siguiente.AutoL&'( sería es más lento de todos, seguido muy de cercapor el formato NA'. (osteriormente creía $ue el formato L2iría muy a la par con "A y no hubiera sabido decidirme entreuno y otro para la tercera posición. por ltimo me esperabauna victoria aplastante de 9bjectA12. (ero hay sorpresas <

REPETICIONES Tiempo en milisegundos

LSP FAS VLX VBA ARX

Page 37: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 37/39

50 10 10 19 10 0

500 10 1!9 1 10 "0

1000 "#1 #"0 ""0 50 90

500 10!1 $%1 10$0 !#1 0

5000 11# 1$11 1% 1$ "#1

10000 "1! #95 "##! 5!" $%1

O>u) ha ocurrido con L2P. "ien, pues buscando un poco porla red encontr) esto <

W55 7 ProJr$# Rn F$s:er^TOere $re :Ko s%es :o :Oe :#e s$9nJs sse n re5$:onsO> :o $>roJr$##nJ :oo5 sO $s s$5 LISP.A :o> o n:eres: :o #$n >roJr$##ers s s>ee% o exe:on or #oresn:5 -W55 # >roJr$# rn$s:er^- TOe $nsKer s 2$s$55 $n $r#$:9e?K:O so#e $9e$:s.TOere $re s2:5e %erenes n :OeK$ :Oe n%9%$5 n:er>re:ers e9$5$:e >roJr$# o%e $n% $s $onseYene o :Oe K$ :Oe $re 25:>roJr$#s K55 rn $: %eren: s>ee%s. TOe s:5e o :Oe >roJr$##nJK55 n5ene :Oe s>ee% #ore :O$n$n:OnJ e5se. For ex$#>5e KOen I :es:e% :Oe s>ee% o s$5 LISP9erss A:oLISP I on% $ $se KOereA:oLISP K$s $s:er. A:oLISP O$n%5e% $ rerson >ro25e# $s:er :O$ns$5 LISP. TOe ex$#>5e se% K$s:Oe o##on $:or$5 o#>:$:on n:on. E9en $:er :Oe s$5 LISP>roJr$# K$s o#>5e% n:o $n ARX#o%5e A:oLISP K$s s5JO:5 $s:er $: so59nJ :Oe >ro25e#. oKe9ern :Oe o:Oer :es:s snJ #oreo##on :er$:on s:r:res $n% n9o59nJ 5o$:nJ >on: $r:O#e::Oe s$5 LISP >roJr$# K$s :Ko:o :Oree :#es $s:er on $ reJ5$r 2$ss. [o $n ex>e: A:oLISP$>>5$:ons :O$: n9o59e n#er$5Kor :o rn $s:er n :Oe s$5 LISP en9ron#en: (one >ro>er5>re>$re%).

Fen:e&

55 _r$#erO::>&//$%ene.$%9$ns:$r.o#/18/88/os88.O:#5

6engan cuidado con este tipo de cosas ya $ue aveces reemos osas erróneamente $ue nos pueden llevar arealizar malos dise!os y no entender el por$u) de ello. Así $ue cuando la velocidad de ejecución sea un item a tener encuenta ojo con las funciones $ue empleemos, parece ser $ueno por ser una función más moderna est) más optimizada o

tenga $ue ser más rápida, aun$ue la mayoría estaremos deacuerdo en $ue debería serlo.

Page 38: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 38/39

+ual$uier duda u opinión puede hac)rmela llegara davides$bThotmail.com.

:n saludo.

#avid Es$uinas.http://topoligonar.galeon.com/tutoriales/test1/test1.html

Biblioografa.-

Page 39: La Programación en AutoLISP

7/23/2019 La Programación en AutoLISP

http://slidepdf.com/reader/full/la-programacion-en-autolisp 39/39

https://sis2430.fles.wordpress.com/2009/11/tema-.pd!