Programar Auto Lips

download Programar Auto Lips

of 15

Transcript of Programar Auto Lips

  • 8/19/2019 Programar Auto Lips

    1/33

    Programación en AutoLISP

     

    ONCE.1. INTRODUCCIÓN

    A parte de todo lo visto en cuestión de personalización, AutoCAD 14 ofrece al usuariola posibilidad de crear programas y aplicaciones verticales totalmente funcionales.Estos programas podrán ser distribuidos por el creador, eso sí, siempre correránbajo 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 totalmenteintegrado 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 $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 crear programasparaAutoCAD. 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 íntimae integrada con AutoCAD, esto es, AutoCAD posee internamente un propio int)rpretede 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 lenguajeevaluado, es decir, está a un paso entre los lenguajes interpretados, por un lado, y loslenguajes 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 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án habitualmentela e%tensión .LSP.

  • 8/19/2019 Programar Auto Lips

    2/33

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

    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 como funcionese%ternas.

    El código fuente de estas aplicaciones ha de escribirse y compilarse en un compiladore%terno de +, es decir, AutoCAD no provee de un entorno de programación para estasaplicaciones, como ocurre con AutoL&'( o "A. El programa objetoejecutable .EXE *normalmente, producto de la compilación del fuente, podrá sercargado desde AutoCAD.

    NOTA: Este entorno está ya obsoleto en la versión /0 y los programas desarrollados en)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 otro entornode programación + $ue posibilita, al contrario $ue A#', una comunicación directa delas aplicaciones con AutoCAD. #e esta forma, no es necesaria la intervención deAutoL&'( como intermediario. La aplicación 1ender, en RENDER.ARX, es un ejemplo deprograma 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 este curso.

    NOTA: En la versión /0 de AutoCAD e%iste el comando ARX para cargar, descargar yobtener 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ón enisual "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 $ue incluye AutoCAD

  • 8/19/2019 Programar Auto Lips

    3/33

    14. Este módulo contiene la sinta%is del lenguaje, un depurador y un entorno dedesarrollo. Así, el programador, puede programar rutinas "A e ir probándolas en unasesión de AutoCAD mientras se van depurando.

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

     

    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 y efectiva.Este entorno proporciona herramientas para desarrollar y depurar las rutinas ycompilarlas como aplicaciones A12. 6ambi)n dispone de su propio evaluador, $ueemula al de AutoL&'(, además de un completo control de codificación y seguridad delas rutinas creadas.

    El entorno de isual Lisp es un módulo $ue se carga bajo demanda. 7o está incluido enel propio ncleo de AutoCAD, como ocurre con el evaluador de AutoL&'(. El nuevoconjunto de funciones incorporadas en isual Lisp permite trabajar en diferentes áreasy niveles $ue incluyen funciones a!adidas de AutoL&'(, funciones de acceso al sistemaoperativo y E8' de archivos, funciones de carga y vinculación de objetos y bases dedatos, almacenamiento directo de listas en un archivo de dibujo, acceso al conjunto deobjetos Active2 de AutoCAD y tecnología basada en 9bjectA12 $ue no necesita lapresencia 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 seremonta 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 lugar dedatos 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 de

    usuario, un dato constante... Las listas elaboradas mediante símbolos son evaluadas yprocesadas 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ón en un procesode dibujo, la sencillez del lenguaje y su sinta%is, y otras $ue hacen de )l unaherramienta muy til y sencilla de manejar y aprender.

  • 8/19/2019 Programar Auto Lips

    4/33

    +omo tambi)n hemos dicho ya, el lenguaje AutoL&'( *y L&'( es un lenguaje evaluado,y no interpretado o compilado. Los lenguajes interpretados son leídos palabra apalabra por el ordenador, al ser introducidas, y cada una de ellas convertida a lenguajemá$uina. Esto hace $ue sea sencilla su edición y detección de errores de sinta%is uotros; por el contrario, hace $ue sean muy lentos *ejemplo< =icrosoft >"A'&+. Loscódigos de los lenguajes compilados son escritos por completo y, antes de su ejecución

    final, es necesario compilarlos, convirti)ndolos así en código fuente ejecutable ycomprensible por la má$uina. Este tipo de lenguajes hace $ue su ejecución sea másrápida y pura pero, en contra, resulta más difícil su depuración *ejemplos< =icrosoft>uic?"A'&+ o "orland +@@.

    Los lenguajes evaluados -AutoL&'(- están a caballo entre unos y otros. 7o son tanrá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!ado paratrabajar 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 o diámetro,tipo de línea, color... (odremos pues desde AutoL&'( acceder a dicha base de datospara modificarla, editarla o para e%portar datos, por ejemplo, a una base de datos

    e%terna.

     

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

  • 8/19/2019 Programar Auto Lips

    5/33

    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 (/x18.))) (SETQ

    s (SIN xr))), se trata de una lista $ue contienecinco 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%ponencial mediante e o E.

    Cadenas &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& alores te%tuales $ue contienen cadenas de 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.

  • 8/19/2019 Programar Auto Lips

    6/33

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

    Con(untos desi#nados de AutoCAD  alores $ue representan un conjunto de se 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ón prede finida de AutoL&'(. 'e suelen denominar con la abreviatura inglesa su%rs. (ueden ser in ternas o e%ternas.

     

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

    La base de todo int)rprete de L&'( es su algoritmo evaluador. Gste analiza cada líneade programa y devuelve un valor como resultado. La evaluación sólo se realizarácuando se haya escrito una lista completa y )sta podrá ser cargada desde un archivode te%to o tecleada directamente en la línea de comandos de AutoCAD 14.

    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 todos losnombres de funciones de usuario cargadas en memoria. 'i el nombre es reconocido, serealiza la evaluación de la e%presión de AutoL&'(. Esta puede consistir en asignar unvalor a una variable, cargar en memoria una función de usuario, escribir un resultadoen 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&'( serealiza 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 de elementoscomo argumentos. +uando los elementos de una lista son a su vez otras listas, )stasse van evaluando desde el nivel de anidación inferior *las listas más FinterioresF. Elvalor resultante en cada evaluación de las listas FinterioresF, es utilizado por las listasFe%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 los restantes.

  • 8/19/2019 Programar Auto Lips

    7/33

    La evaluación de dicha lista devuelve el resultado del cociente, en este caso el valorcontenido en la variable xdividido entre el nmero real 18.. #icho valor es utilizadocomo elemento en la lista circundante $ue empieza por la función de AutoL&'( * $uerealiza una multiplicación o producto. Esta lista se evala ofreciendo como resultado elproducto de PI *3,/0/HI por el valor anterior. A su vez el resultado interviene comoargumento en la lista $ue empieza por la función de AutoL&'( SIN, $ue es evaluada

    obteni)ndose el seno. Este interviene por ltimo como argumento de la lista máse%terior $ue empieza por la función de AutoL&'( SETQ , cuyo resultado es asignar oalmacenar en la variable sx el valor del seno. Este valor es devuelto por la listade 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 enAutoL&'( a la $ue falta por cerrar algn par)ntesis, se visualiza un mensaje deltipo n! donde n es un nmero $ue indica cuántos par)ntesis faltan por cerrar. 'e

    pueden 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 producir incluso

    en mitad de un comando. (or ejemplo, para suministrar como ángulo para un arco elvalor contenido en la variable x, se responde a la solicitud de AutoCAD con +x. (orejemplo<

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

    Cuarta0

    Los valores enteros, reales, cadenas de te%to y descriptores de archivos, devuelven su

    propio valor como resultado. Los nombres de funciones inherentes o subrutinas deAutoL&'( devuelven un nmero interno he%adecimal *suele cambiar de una sesión dedibujo a otra. (or ejemplo<

    +,'. devuelve ,'.+-Ino- devuelve -Ino-+SETQ devuelve 0S2r& 31$e'4!

  • 8/19/2019 Programar Auto Lips

    8/33

    uinta0

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

    +x devuelve +sx devuelve .'

    Se2ta0

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

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

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

     

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

    Las e%presiones contenidas en un programa de AutoL&'( pueden introducirsedirectamente desde el teclado durante la edición de un dibujo de AutoCAD, escribirlasen un fichero de te%to A'+&& o ser suministradas por una variable del tipo 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íneas delarchivo 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á interpretado comoun 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.

  • 8/19/2019 Programar Auto Lips

    9/33

    - Los espacios en blanco de separación entre símbolos son interpretados como un soloespacio entre cada par de símbolos. 'e recuerda $ue es necesario un espacio enblanco 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 los

    par)ntesis interiores de los e%teriores. 6odos los espacios a!adidos son interpretadoscomo 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 es válida lacoma decimal, ni tampoco abreviar como en . *hay $ue escribir ..

    - Los valores de constantes con cadenas de te%to son caracteres $ue empiezan y

    terminan por comillas. #entro de las cadenas se pueden incluir caracteres de controlmediante la contrabarra *;. Los códigos permitidos son<

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

    ;- ?????? +arácter comillas *-.;e ?????? +arácter de escape.;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 valor octalserá 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 de AutoL&'( QU6TE,no se evala con el valor $ue contiene en ese momento sino $ue devuelve el propionombre literal del símbolo.

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

  • 8/19/2019 Programar Auto Lips

    10/33

    =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 situar alprincipio 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 pantalla dete%to disponen de un ancho de J columnas, conviene $ue las líneas del archivo dete%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 utiliza paraestablecer $ue determinadas condiciones se cumplen.

    • (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 un sí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 a mayordificultad, por lo $ue la estructura puede llegar a parecer un poco caótica para alguien$ue conozca el lenguaje. 6ampoco es objetivo de este curso profundizar en un m)todocomplejo de programación, sino proponer unas bases para comenzar a programar $ue,con imaginación y horas de trabajo, podrá convertirnos en programadores e%pertos deAutoL&'(.

    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 de

  • 8/19/2019 Programar Auto Lips

    11/33

    este 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 nos serátremendamente til a la hora de lanzarnos a la programación pura.

     

    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óny 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&'(, $ue eneste caso es @ y luego los argumentos de la misma, es decir, a$uí los valores de losdistintos sumandos.

  • 8/19/2019 Programar Auto Lips

    12/33

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

    (@ 14 1 ')

    devolvería el valor 44. (ara hacer la prueba nicamente debemos escribir dicho renglón

    en la línea de comandos de AutoCAD, pulsar INTR6 y comprobar el resultado.

    NOTA: Al introducir el primer carácter de apertura de par)ntesis, AutoCAD reconoce$ue se está escribiendo una e%presión en AutoL&'(, por lo $ue nos permitirá utilizar losespacios necesarios de la sinta%is sin $ue se produzca un INTR6 cada vez, como eshabitual. 1ecordemos $ue todos los elementos de una lista de AutoL&'( han de irseparados por lo menos con un espacio blanco. (robemos diferentes sinta%is utilizandomás espacios, o tabuladores, y comprobemos $ue el resultado es el mismo; seinterpretan los espacios 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 introducir unvalor real para recibir una respuesta real. (or ejemplo, si introducimos la siguientelí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, por ejemplo,de la división.

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

    (@ ')

    devuelve<

    '

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

  • 8/19/2019 Programar Auto Lips

    13/33

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

    (@ 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 a declararvariables. 'i la variable no e%istiera se produciría un error bad argument type deAutoL&'(.

    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; o lo$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 valor sedevuelve 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 para posterioresoperaciones, deberemos indicar uno de los valores entero; de la siguiente manera, porejemplo<

    (? 1 . ')

    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#')

  • 8/19/2019 Programar Auto Lips

    14/33

    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 operaciones dedentro a fuera. En este ejemplo, se suma la cantidad de /B a la diferencia B - 3, estoes 6 ,1 4 31 . 25 0 ,,. +omo vemos, e%isten dos listas, una interior anidada a la otra$ue es, a la vez, argumento de la lista e%terior. 9curre lo mismo con nombres devariables<

    (? 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 nos mostraráun mensaje de error. 1ecordar $ue si no los escribimos nos da la opción de escribirlosdespu)s, así como el nmero de ellos $ue faltan. #e todas forma, consltese el finaldel 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, es decir,

    divide el primer nmero por el producto de los demás. (or ejemplo<(/ 1 ')

    da como resultado . el ejemplo siguiente<

    *8 /JJ H H

  • 8/19/2019 Programar Auto Lips

    15/33

    da como resultado 4, es decir, ,-- 7 / 0 1- y, luego, 1- 7 / 0 8; o lo $ue es lo mismo 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, estoes, si se indica un solo valor se devuelve el mismo valor, si se indica la función sinargumentos se devuelve  y si se indican valores enteros sólo se devuelven valoresenteros. Esto ltimo cobra especial sentido en el caso de las divisiones, ya $ue elcociente entre dos nmeros enteros puede ser un nmero real. eamos el siguienteejemplo<

    (/ 1 ,)

    'i introducimos esta línea el resultado será '. El motivo es $ue, como hemos

    especificado valores enteros, el resultado se muestra en forma de nmero entero, conla 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 cuyo resultado

    vaya a ser parte integrante de otra operación -o no- $ue puede devolver 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 byzero.

     

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

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

    *HJ @ H 8 B*BJJ M H - 3 8 *0 8 B

  • 8/19/2019 Programar Auto Lips

    16/33

    */J.B3 - */B.J3 8 3 M */B @ *B M B - **/B.H 8 B M B.CH*/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

  • 8/19/2019 Programar Auto Lips

    17/33

    9tros ejemplos de estas dos funciones<

    (1? n)(1? ,.)(1? ?')(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ón indicada.#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 nmero realcon decimales devuelve nicamente su parte entera. (ero, cuidado, no se produceredondeo, 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  comoresultado<

    (RE7 ' ,)

  • 8/19/2019 Programar Auto Lips

    18/33

    #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)

    da como resultado '. El primer resto  se calcula de la forma e%plicada en el ejemploanterior y, el resultado final ', se produce al dividir dicho primer resto entre el tercervalor 4. Al dividir C 8 0, nos da un resultado *$ue es igual a / y un resto ' *valor finalobtenido. 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 calcularlas medianteAutoL&'(. La primera sinta%is se refiere al seno de un ángulo y es la siguiente<

    (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, esdecir, realiza el arcotangente de dicho valor. (or ejemplo<

    (ATAN 1.) devuelve .8

  • 8/19/2019 Programar Auto Lips

    19/33

    '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.))

    Estas son las tres funciones trigonom)tricas de AutoL&'(. En este punto se nosplantean un par de problemas< Ocómo calculo las restantes funciones trigonom)tricasPy 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,

  • 8/19/2019 Programar Auto Lips

    20/33

    (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 )

    EXPT devuelve el valor de base elevado a exponente. #e esta forma, para elevar H alcubo *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 elevado a / 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. 'ecorresponde 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'.

  • 8/19/2019 Programar Auto Lips

    21/33

    (G"D  valor_entero1 valor_entero2 )

    Esta sinta%is se corresponde con la función de AutoL&'( G"D, $ue devuelve el má%imocomn denominador de los dos valores indicados. Estos valores han de serobligatoriamente enteros, de no ser así, AutoL&'( devuelve bad argument type comomensaje 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 improperargument.

    Las dos ltimas funciones matemáticas $ue veremos pueden sernos de gran ayuda a lahora 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%presiones matemáticoaritm)ticas. Así por ejemplo<

    (7AX ,8.4 C1' ,8 ,)

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

    'i el elemento mayor de la lista es un e%presión matemática, se devolverá suresultado, 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 en lista.Las demás consideraciones son análogas a la función anterior. Ejemplos

  • 8/19/2019 Programar Auto Lips

    22/33

    (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$

    • 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 Barccos */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í como demá%imos comunes denominadores.

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

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

     

    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 funciones son

  • 8/19/2019 Programar Auto Lips

    23/33

    conocidas por todos *igual, mayor $ue, menor o igual $ue..., sólo $ueda determinarcó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 de dos< T *6rue$ue representa el verdadero o cierto, o n5 $ue representa el falso o nulo.

    NOTA: +on la devolución n5 por parte de AutoL&'( nos empezamos a familiarizarahora 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( 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 indicaun valor en la lista, AutoL&'( devuelve T.

    NOTA: Kay $ue tener en cuenta $ue esta función sólo compara valores y no listas o

    e%presiones. 'i, por ejemplo, se tienen dos variables >:1 y >:' con dos puntos $ue sonlistas de tres elementos *una coordenada 2, una coordenada y una coordenada R,para comparar la igualdad de ambos habría $ue recurrir a una función lógicacomo EQUAL, $ue veremos un poco más adelante.

    (/  valor1 [valor2...] )

     

  • 8/19/2019 Programar Auto Lips

    24/33

  • 8/19/2019 Programar Auto Lips

    25/33

    (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 anterior pero

    teniendo en cuenta $ue devolverá T si cada valor es menor o igual $ue el anterior. 'ino 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 no devuelve n5.(or ejemplo<

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

    9tros ejemplos<

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

    (!  valor1 [valor2...] )

    'imilar a los anteriores, establece la comparación mayor o igual $ue. 'e devolverá T siy sólo si cada valor es mayor o igual $ue el $ue le sucede, si no, n5. Las demásconsideraciones 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))

  • 8/19/2019 Programar Auto Lips

    26/33

    ( -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 yel NO lógico. Además, e%iste una $uinta función $ue veremos al final denominada deidentidad de e%presiones y $ue es un poco especial.

    Las cuatro funciones $ue vamos a ver actan como operadores lógicos y devuelven, aligual $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 $ue representanotras tantas condiciones. Esto significa $ue evala todas las e%presiones ydevuelve T si ninguna de ellas es n5. En el momento en $ue alguna es n5, abandonala evaluación de las demás y devuelve n5. Es decir, se deben cumplir todas y cadauna de las condiciones. eamos un ejemplo<

    (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 es así,devuelve T.

    #e otra forma, si una de las condiciones no se cumple, devuelve n5, por ejemplo en elsiguiente caso<

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

    La primera condición en verdadera */J es igual a /J, pero la segunda es falsa */J noes mayor $ue /J. +omo una ya no se cumple se devuelve n5. Kan de cumplirsetodas las condiciones para $ue sea el resultado verdadero. eamos otros dos 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 dos siguientesson id)nticas y producen el mismo resultado

  • 8/19/2019 Programar Auto Lips

    27/33

    (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ón ydevuelve 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í lo es-,devuelve T. El cumplirse una de las dos condiciones es condición suficiente para $uedevuelva T. eamos otro ejemplo<

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

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

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

    (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 cumpleesto, o esto, o esto, o... es válidoF.

    eamos ahora otra función lógica para comparar e%presiones. 'e llama EQUAL y su

    sinta%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.

  • 8/19/2019 Programar Auto Lips

    28/33

    A primera vista puede parecer igual a la función  *igual $ue estudiada, sin embargo,)sta nicamente comparaba valores; EQUAL tiene la capacidad de poder compararcual$uier e%presión o lista de e%presiones. #e esta forma, podemos utilizar EQUAL de lamisma forma $ue , así<

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

    (ero no tiene mucho sentido, ya $ue tenemos la función . 1eservaremos EQUAL paralo 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 comparar laidentidad 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%presiones cuyosresultados son nmeros reales y puede haber una pe$ue!a diferencia decimal $ue no$ueramos considerar desigual. +on este argumento suministramos a la función un

    valor de apro%imación decimal respecto al cual se creerán iguales los resultados. (orejemplo<

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

    (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; cuando elresultado 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.

  • 8/19/2019 Programar Auto Lips

    29/33

    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 paracomparar listas y ver si hay igualdad estructural.

    La diferencia de EQ con EQUAL es $ue )sta ltima compara los resultados de evaluar lase%presiones, mientras $ue EQ compara la identidad estructural de las e%presiones sin

    evaluar. (or ejemplo, y adelantando la función SETQ $ue enseguida veremos, podemoshacer 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, pordefinición, igual a5s:' y no a 5s:, aun$ue sus elementos sean iguales. Es por 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 ahora<$u) más dará $ue una e%presión matemática me d) un resultado si luego no puedooperar con )l; $ue importará $ue una proposición lógica me devuelva 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á ungran nivel de soltura a la hora de programar de verdad. 'eguramente, además, a$uellapersona $ue sepa programar en algn lenguaje e%istente, habrá comprendido algo más-ya $ue todos son muy parecidos-. El neófito comenzará a ver las cosas clarasinmediatamente.

  • 8/19/2019 Programar Auto Lips

    30/33

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

    Tutorial AutoLISP de AutoCAD para PrincipiantesCada programa de AutoLISP debe ser similar a esto:

    (miprog defun ()(Princ "Juan")(Princ))

    Puede ejecutar AutoLisp en la linea de Comandos dentro de AutoCAD A!u es donde #amos aempe$ar

    AutoLISP es un lenguaje !ue de#uel#e un #alor despu%s de la ejecuci&n Cada funci&n !ue seejecuta #a a de#ol#er o eco de su respuesta 'amos a probar esto Abra AutoCAD escriba losiguiente en la lnea de comandos: ( * +)  pulse la tecla Intro (La funci&n agrega n,merosjuntos) -ire la lnea de comandos .sted debe #er algo !ue se parece a esto:

    /bser#e !ue el 0 debajo de la lnea se 1a escrito AutoLISP de#uel#e el #alor de la funci&n !ue 1aescrito Ponlo a prueba2 una #e$ m3s 4sta #e$ cambia el * a 0 el + a 5 Al igual !ue en ( 0 5)67u% lo de#uel#a8 AutoLisp siempre de#uel#e la respuesta

    Variables

    Las #ariables son nombres para los #alores 9ecuerde !ue el 3lgebra8 ; * ; + Le resultafamiliar82 e < son #ariables Si usted necesita almacenar datos2 como una cadena o un entero2tendr3 !ue asignar un nombre de #ariable para los datos La forma de 1acerlo es utili$ar lafunci&n set! 4j (Set! a *) 4ste conjunto es la una #ariable con el #alor * Cada #e$ !ue utilicela #ariable a en su programa2 !ue en realidad se utili$a el #alor * Si se introduce con tipo ( a+)  se presiona2 AutoLisp #ol#era 0

    Puede utili$ar cual!uier nombre de #ariable !ue desea  (Pr3cticamente) -a,sculas min,sculas2no importa Le sugiero !ue no utili$an los nombres !ue usa el AutoCAD 6C&mo saber cu3les est3nsiendo utili$ados por AutoCAD8 =uena pregunta 4l m%todo m3s sencillo para saber si AutoCADutili$a un nombre2 basta con escribir el nombre en el interior del smbolo del sistema de AutoCAD

    pulse la tecla 4nter Si no ocurre nada2 lo pueden utili$arDefina las #ariables los programascon nombres ,nicos Algunos ejemplos de seguridad de los nombres de #ariables son lassiguientes:

    (setq b1 3)

    (setq aa1 4)

    (setq JuansVarForHisProgram 1)

  • 8/19/2019 Programar Auto Lips

    31/33

    (setq thisVarA 2)

    Algunos malos ejemplos:(set! line *)(set! acad >)(set! ltscale ?)(set! car *+)(set! cdr >@@)

    Le sugiero !ue sean descripti#os los nombres de las #ariables2 para no confundirnos acordarnos4sto es mu ,til cuando se depura un programa 4scriba(setq aa1 454)  pulse 4nter Paracomprobar el #alor de la #ariable !ue acaba de declarar2 simplemente escriba aa* en el smbolodel sistema presione 4nter 4l uso de un signo de eBclamaci&n en la parte delantera de la#ariable se imprime el #alor de la #ariable a la lnea de comandos

    Funciones

    'amos a dar un paso m3s crear nuestra propia funci&n Cada funci&n definida comien$a con ladeclaraci&n defun

    4j (%en #>roJ() o (%en ">roJ()

    La diferencia entre el uso de la C: no utili$ar el C: se eBplicar3 m3s adelante Por a1ora #amosa aprender otra funci&n de AutoLisp para ser usada en nuestro primer programa Lafunci&n princsimplemente imprime en la lnea de comandos 4j (princ "Juan") imprimir3 Juan enla lnea de comandos =ueno entonces2 #amos a escribir esto en el smbolo del sistema:

    (defun miprog()(princ "Juan"))  pulse 4nter

    .sted debe #er algo !ue se parece a esto:

    A1ora escribe (miprog) en el smbolo del sistema presione la tecla enter .sted debe #er algo

    !ue se parece a esto:

  • 8/19/2019 Programar Auto Lips

    32/33

    4l programa se ejecuta e imprime "Juan" en la lnea de comandos A continuaci&n2 el programa1i$o eco de la ,ltima declaraci&n de la lnea de comandos AutoLISP de#uel#e siempre larespuesta correcta8 4s por eso !ue termin& con Juan "Juan" en la lnea de comandos La manerade des1acerse de la eco es utili$ar una declaraci&n princ sin ning,n tipo de par3metros como la,ltima declaraci&n de tu programa 4j (princ)'amos a reescribir el programa usando la funci&n (princ) para detener el eco 4scriba esto es enel prompt de comando:

    (defun miprog()(princ "Juan")(princ))

    A continuaci&n2 escriba (miprog)  pulse 4nter 67u% pas&8 Sin eco =ien

    A1ora si #amos a eBplicar lo del directorio C: !ue 1emos mencionado anteriormente 4l C: enAutoCAD no indica !ue desea !ue este programa se ejecute en el smbolo del sistema como unafunci&n integrada 'amos a 1acer de nue#o el programa 4scriba esto en la lnea de comandos:

    (defun C:miprog()(princ "Masingenio")(princ))

    A1ora escribe (miprog)  pulse 4nter 67u% pas&8 6Por !u% imprime Juan8 Se utili$& el C: delantede la funci&n o tenemos !ue poner el programa entre par%ntesis para ejecutarlo (a algunasotras diferencias2 #amos a llegar a eso en los ni#eles a#an$ados) Para ejecutar una funci&n !uese declar& con una C: s&lo tienes !ue escribir el nombre del programa en el smbolo delsistema 'amos a 1acer eso a1ora 4scribe miprog en el smbolo del sistema presione4E9A9 Se imprime "-asingenio" a la lnea de comandos FGoH o salir corriendo para mostrara todos toda#a La pr&Bima #e$ !ue abra un dibujo de su nue#a funci&n #a a desaparecer ustedtendr3 !ue escribirla de nue#o .na pena

    F4spera Podemos guardarlo en el disco #uel#a a cargarlo cada #e$ !ue lo necesitaba 'amos a1acer eso 'o a suponer !ue usted tiene un sistema operati#o de GindoHs para las siguientesinstrucciones

    aga clic en el bot&n Inicio Ir a los programas Ir a Accesorios Ir a la =loc de notas =loc de notas se debe abrir Cuando lo 1ace2 escribe en:

    (defun C:miprog()

    (princ "Juan")

      (princ "Masingenio")

      (princ "AutoLisp")

      (princ)

    )

    A1ora2 #aa a "Arc1i#o" del men, desplegable en el =loc de notas seleccione "uardarcomo" 4scriba miproglsp para el nombre del programa F4spera o 1agas clic en el bot&n.A9DA9 toda#a 4l =loc de notas tiene la mala costumbre de suponer !ue desea guardar comoun arc1i#o de teBto con la eBtensi&n tBt Ir a los "uardar como" en el cuadro desplegableseleccione "Eodos los arc1i#os ()" Aseg,rese de guardar el arc1i#o en una ubicaci&n en la !ue

    AutoCAD puede encontrar el arc1i#o de forma r3pida Sugiero crear un directorio en su disco duropara guardar todos sus arc1i#os AutoLISP2 me permito sugerir un directorio como por ejemplo:"C:KACADKlsp"'ol#er a AutoCAD Ir al -enu "-anage" luego 1a$ clic en el bot&n de "Load Aplication" Luego enla #entana !ue se abre2 tienes !ue ubicar tu arc1i#o seg,n la ruta !ue le diste2 lo seleccionas 1aces clic en el bot&n "Load" aga clic en el bot&n "Close" para salir del cuadro de di3logo

  • 8/19/2019 Programar Auto Lips

    33/33

     Luego escriba miprog  pulse enter Si se pulsa el bot&n + para !ue apare$ca la pantalla deteBto2 deberas #er algo parecido a esto:

    < listo 1a creado un programa de AutoLISP Felicitaciones