Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Programa con autolisp, Transcripciones de Arquitectura

Breve introducción a autolisp en autocad

Tipo: Transcripciones

2019/2020

Subido el 11/04/2023

angel-heredia-4
angel-heredia-4 🇧🇴

1 documento

1 / 94

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Programación en AutoLisp
6 Programación en AutoLisp
Computación Gráfica 145
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e

Vista previa parcial del texto

¡Descarga Programa con autolisp y más Transcripciones en PDF de Arquitectura solo en Docsity!

Programación en AutoLisp

6 Programación en AutoLisp

Computación Gráfica 145

Tema 6

6.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 menús 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 Base de Datos interna del programa.

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

6.1.1. AutoLISP

6.1.1.1. Entorno AutoLISP

Dentro de lo que es la programación existen diversas interfaces para crear programas para AutoCAD. El más antiguo y, quizá el más utilizado hasta ahora, es AutoLISP. AutoLISP es una adaptación del lenguaje de programación LISP que forma parte íntima e integrada con AutoCAD , esto es, AutoCAD posee internamente un propio intérprete de LISP.

El lenguaje LISP está basado en lo que se denominan listas de símbolos. Es un lenguaje de alto nivel (como BASIC) y que, en principio, fue diseñado para la investigación en el campo de la inteligencia artificial. AutoLISP es un lenguaje evaluado, es decir, está a un paso entre los lenguajes interpretados, por un lado, y los lenguajes compilados, por otro.

Como hemos dicho, AutoCAD provee al usuario de un propio intérprete de AutoLISP interno. Este intérprete, al que habría que llamarle evaluador , se encarga —precisamente— de evaluar las expresiones 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 texto ASCII. Dichos archivos tendrán habitualmente la extensión .LSP.

6.1.1.2. Entorno Visual Lisp

A partir de la Versión 14 existe un nuevo entorno de desarrollo denominado Visual Lisp que permite realizar aplicaciones en AutoLISP de una manera más rápida y efectiva. Este entorno proporciona herramientas para desarrollar y depurar las rutinas y compilarlas como aplicaciones ARX. También dispone de su propio evaluador, que emula al de AutoLISP, además de un completo control de codificación y seguridad de las rutinas creadas.

146 Dpl. Ing. Carlos Balderrama Vásquez

Tema 6

Atendiendo a sus características podemos definir varios tipos de objetos y datos en AutoLISP, que son los de la tabla siguiente:

Objeto o dato

Lista Objeto que se compone de elementos encerrados entre paréntesis.

Elemento Cualquiera de los componentes de una lista.

Símbolo Cualquier elemento de una lista que no sea una constante.

Enteros Valores numéricos enteros, sin punto decimal.

Reales Valores numéricos con coma flotante de doble precisión.

Cadenas Valores textuales que contienen cadenas de caracteres en código ASCII.

Descriptores de archivo Valores que representan un archivo abierto para lectura o escritura.

Nombres de objetos de dibujo Valores que representan el "nombre" hexadecimal de un objeto de la Base de Datos.

Conjuntos designados de AutoCAD Valores que representan un conjunto de elección de objetos de dibujo.

Funciones de usuario Símbolo que representa el nombre de una función definida por el usuario.

Función inherente o subrutina Símbolo con el nombre de una función predefinida de AutoLISP.

6.2.2. Procedimientos de evaluación

La base de todo intérprete de LISP es su algoritmo evaluador. Éste analiza cada línea de 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 archivo de texto o tecleada directamente en la línea de comandos de AutoCAD 14.

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

148 Dpl. Ing. Carlos Balderrama Vásquez

Programación en AutoLisp

  • Primera: Las listas se evalúan quedando determinadas por el primer elemento. Si éste es un nombre de función inherente o subrutina, los elementos restantes de la lista son considerados como los argumentos de esa función. En caso contrario se considera como un nombre de función definida por el usuario, también con el resto de elementos como argumentos. Cuando los elementos de una lista son a su vez otras listas, éstas se van evaluando desde el nivel de anidación inferior (las listas más "interiores"). El valor resultante en cada evaluación de las listas "interiores", es utilizado por las listas "exteriores". Por ejemplo:

(SETQ sx (SIN (* PI (/ x 180.0))))

La lista más "interior" contiene como primer elemento el nombre de la función de AutoLISP / que realiza el cociente o división del siguiente elemento entre los restantes. La evaluación de dicha lista devuelve el resultado del cociente, en este caso el valor contenido en la variable x dividido entre el número real 180.0. Dicho valor es utilizado como elemento en la lista circundante que empieza por la función de AutoLISP * que realiza una multiplicación o producto. Esta lista se evalúa ofreciendo como resultado el producto de PI (3,14159) por el valor anterior. A su vez el resultado interviene como argumento en la lista que empieza por la función de AutoLISP SIN, que es evaluada obteniéndose el seno. Este interviene por último como argumento de la lista más exterior que empieza por la función de AutoLISP SETQ , cuyo resultado es asignar o almacenar en la variable sx el valor del seno. Este valor es devuelto por la lista de SETQ como resultado final.

  • Segunda: Puesto que cada lista contiene un paréntesis de apertura y otro de cierre, cuando existen listas incluidas en otras, todos los paréntesis que se vayan abriendo deben tener sus correspondientes de cierre. Si se introduce desde el teclado una expresión en AutoLISP a la que falta por cerrar algún paréntesis, se visualiza un mensaje del tipo n > donde n es un número que indica cuántos paréntesis faltan por cerrar. Se pueden introducir por teclado esos paréntesis y subsanar el error. Por ejemplo:

Comando: (SETQ sx (SIN (* PI (/ x 180.0)) 2 > ))

  • Tercera: También es posible evaluar directamente un símbolo (extraer por ejemplo el valor actual contenido en una variable), introduciendo por teclado el signo de cerrar admiración seguido del nombre del símbolo. Esta evaluación se puede producir incluso en mitad de un comando. Por ejemplo, para suministrar como ángulo para un arco el valor contenido en la variable x, se responde a la solicitud de AutoCAD con !x. Por ejemplo:

Comando: !sx

Computación Gráfica 149

Programación en AutoLisp

comillas, punto y coma, espacio en blanco o final de línea en el archivo. Estos caracteres sirven de separación entre elementos de una lista.

  • Los espacios en blanco de separación entre símbolos son interpretados como un solo espacio entre cada par de símbolos. Se recuerda que es necesario un espacio en blanco para separar un símbolo del siguiente, siempre que no haya paréntesis, apóstrofo, comillas o punto y coma. Debido a la longitud de las expresiones de AutoLISP y a la profusión de paréntesis que dificultan su lectura, suele ser norma habitual realizar sangrados en las líneas del archivo de texto, para resaltar los paréntesis interiores de los exteriores. Todos los espacios añadidos son interpretados como uno solo.

6.2.4. Variables predefinidas

Existen unos valores de símbolos de AutoLISP predefinidos. Son los siguientes:

  • PI. Es el valor del número real PI, es decir: 3,141592653589793.
  • PAUSE. Es una cadena de texto que consta de un único carácter contrabarra. Se utiliza para interrumpir un comando de AutoCAD después de haberlo llamado mediante la función de AutoLISP COMMAND. Esto permite al usuario introducir algún dato.
  • T. Es el símbolo de True , es decir, cierto o verdadero (valor 1 lógico). Se utiliza para establecer que determinadas condiciones se cumplen.
  • Por último el valor de nada, vacío o falso (0 lógico) se representa en AutoLISP por nil. Este valor aparece siempre en minúsculas y no es propiamente un símbolo, ya que no está permitido acceder a él.

6. 3. Programando En Autolisp

A partir de ahora vamos a comenzar a ver poco a poco la manera de ir haciendo nuestros programas en AutoLISP. Vamos a seguir un orden lógico de menor a mayor dificultad, por lo que la estructura puede llegar a parecer un poco caótica para alguien que conozca el lenguaje. Tampoco es objetivo de este curso profundizar en un método complejo de programación, sino proponer unas bases para comenzar a programar que, con imaginación y horas de trabajo, podrá convertirnos en programadores expertos de AutoLISP.

6.3.1. Convenciones de sintaxis

Las convenciones utilizadas para las sintaxis en estecapítulo van a ser las siguientes:

  • Nombre del comando o función AutoLISP en mayúsculas.
  • Argumentos en minúscula itálica, representados por un nombre mnemotécnico.
  • Argumentos opcionales encerrados entre corchetes itálicos (que no han de escribirse).
  • Puntos suspensivos en itálica indican la posibilidad de indicar más argumentos.

Computación Gráfica 151

Tema 6

6.4. Operaciones Numéricas Y Lógicas

Explicaremos aquí la manera en que se realizan en AutoLISP las operaciones matemá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.

6.4.1. Aritmética básica

Para realizar las cuatro operaciones aritméticas básicas existen cuatro funciones AutoLISP que son +, -, * y /, estas se corresponden con la suma, resta, multiplicación y división.

La función de suma tiene la siguiente sintaxis:

(+ [valor1 valor2 valor3...] )

Esto es, primero se indica el nombre de la función, como siempre en AutoLISP, que en este caso es + y luego los argumentos de la misma, es decir, aquí los valores de los distintos sumandos.

Esta función devuelve el resultado aditivo de todos los valores numéricos especificados como argumentos de la función. Por ejemplo:

(+ 14 10 20)

devolvería el valor 44. Para hacer la prueba únicamente debemos escribir dicho renglón en la línea de comandos de AutoCAD , pulsar INTRO y comprobar el resultado.

NOTA: Al introducir el primer carácter de apertura de paréntesis, AutoCAD reconoce que se está escribiendo una expresión en AutoLISP, por lo que nos permitirá utilizar los espacios necesarios de la sintaxis sin que se produzca un INTRO cada vez, como es habitual. Recordemos que todos los elementos de una lista de AutoLISP han de ir separados por lo menos con un espacio blanco. Probemos diferentes sintaxis utilizando más espacios, o tabuladores, y comprobemos que el resultado es el mismo; se interpretan los espacios o tabuladores como un único carácter de espacio en blanco.

Con la función + podemos indicar valores enteros o reales. Si todos los valores son enteros el resultado será entero, pero si uno o varios de ellos son reales —o todos ellos—, el resultado será real. Esto significa que únicamente es necesario introducir un valor real para recibir una respuesta real. Por ejemplo, si introducimos la siguiente línea en la línea de comandos en AutoCAD :

(+ 14 10 20.0)

el resultado será:

152 Dpl. Ing. Carlos Balderrama Vásquez

Tema 6

da como resultado 3. Esto es producto de restar 10 – 5 = 5 y, luego, 5 – 2 = 3 ; o lo que es lo mismo 10 – (5 + 2) = 3.

Al igual que en la suma, si se indican valores enteros el resultado será entero, si se indica uno real (con uno es suficiente) el resultado es real, si se indica un solo valor se devuelve el mismo valor y si se escribe la función sin argumentos se devuelve 0. Así pues, si queremos un resultado real efectuado con números enteros para posteriores operaciones, deberemos indicar uno de los valores entero; de la siguiente manera, por ejemplo:

(- 10 5.0 2)

o cualquier otra combinación posible de uno o más números enteros.

Como se ha explicado para la suma, los valores de los argumentos para la resta pueden ser constantes, eso sí, siempre numéricas, o variables:

(- tot num1 num2)

Llegados a este punto, podemos suponer ya las diferentes combinaciones que podremos realizar con las distintas funciones aritméticas. Por ejemplo, es factible la evaluación de la siguiente expresión:

(+ 12 (- 2 -3))

cuyo resultado es 11. O sea, y como hemos explicado, se realizarán las operaciones de dentro a fuera. En este ejemplo, se suma la cantidad de 12 a la diferencia 2 – 3, esto es _, 12

  • (2 – 3) = 11_. Como vemos, existen dos listas, una interior anidada a la otra que es, a la vez, argumento de la lista exterior. Ocurre lo mismo con nombres de variables:

(- fer1 (+ -sum1 sum2) 23.44)

Con respecto al producto su sintaxis es la siguiente:

(* [valor1 valor2 valor3...] )

Se evalúa el producto de todos los valores numéricos indicados como argumentos. Como anteriormente, si un valor es real el resultado es real. Un solo valor como argumento devuelve el mismo valor. Ningún valor devuelve 0. Veamos un ejemplo:

(* 12 3 4 -1)

El resultado es -144. Veamos otros ejemplos:

(* 2 3) (* val (- vax vad))

154 Dpl. Ing. Carlos Balderrama Vásquez

Programación en AutoLisp

(+ (- -10 -5) (* 3 total 23))

La sintaxis de la división es la que 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 número por el producto de los demás. Por ejemplo:

(/ 10 2)

da como resultado 5. Y el ejemplo siguiente:

(/ 100 5 5)

da como resultado 4, es decir, 100 / 5 = 20 y, luego, 20 / 5 = 4 ; o lo que es lo mismo , 100 / (5 * 5) = 4.

Otros dos ejemplos:

(/ 24 (* (+ 10.0 2) 12)) (/ 12 2 1)

Con 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ón sin argumentos se devuelve 0 y si se indican valores enteros sólo se devuelven valores enteros. Esto último cobra especial sentido en el caso de las divisiones, ya que el cociente entre dos números enteros puede ser un número real. Veamos el siguiente ejemplo:

(/ 15 7)

Si introducimos esta línea el resultado será 2. El motivo es que, como hemos especificado valores enteros, el resultado se muestra en forma de número entero, con la parte decimal o mantisa truncada. Para asegurarnos de recibir una respuesta correcta (con decimales significativos), deberemos introducir uno de los valores —o todos ellos, pero con uno es suficiente— como valor real, de la siguiente forma:

(/ 15 7.0)

Ahora el resultado será 2.14286. El número entero podría haber sido el otro:

(/ 15.0 7)

Computación Gráfica 155

Programación en AutoLisp

Esta función AutoLISP devuelve el resto del cociente (módulo) de los dos valores introducidos en principio. Por ejemplo, la siguiente expresión devuelve 6 como resultado:

(REM 20 7)

Dicho 6 es el resto que resulta de dividir 20 / 7. Si aplicamos la regla de la división (dividendo es igual a divisor por cociente más resto): 20 = 7 * 2 + 6 , vemos que se cumple correctamente.

Si se especifican más de dos valores, el resto anterior es dividido entre el actual, devolviendo el nuevo resto de la nueva división. Por ejemplo:

(REM 20 7 4)

da como resultado 2. El primer resto 6 se calcula de la forma explicada en el ejemplo anterior y, el resultado final 2, se produce al dividir dicho primer resto entre el tercer valor

  1. Al dividir 6 / 4, nos da un resultado (que es igual a 1) y un resto 2 (valor final obtenido). Y así sucesivamente.

Otros ejemplos:

(REM –1 2) (REM 0 23) (REM (* 23 2) (- (+ 1 1) 45.5)) (REM 54 (* 3 -4))

Pasemos ahora a ver las funciones trigonométricas, esto es, cómo calcularlas mediante AutoLISP. La primera sintaxis se refiere al seno de un ángulo y es la siguiente:

(SIN ángulo )

La función SIN devuelve el seno de un ángulo expresado en radianes. Ejemplos:

(SIN 1) devuelve 0. (SIN (/ PI 2)) devuelve 1.

NOTA: Como sabemos PI es un constante de AutoLISP, por lo que no hace falta declararla como variable; ya tiene valor propio y es 3.14159. Aún así, se puede calcular su valor exacto mediante la expresión: PI = 4 * arctag 1.

(COS ángulo )

COS devuelve el coseno de un ángulo expresado en radianes. Ejemplos:

(COS PI) devuelve –1. (COS (* 3 4)) devuelve 0.

Computación Gráfica 157

Tema 6

NOTA: Nótese que PI es un valor real, por lo que el resultado será real.

(ATAN valor1 [valor2] )

Esta función ATAN devuelve el arco cuya tangente es valor1 expresada en radianes, es decir, realiza el arco-tangente de dicho valor. Por ejemplo:

(ATAN 1.5) devuelve 0.

Si se indica un segundo valor (valor2), ATAN devuelve el arco-tangente de valor1 dividido por valor2. Esto permite indicar la razón entre los lados de un triángulo recto, es decir, escribir la tangente directamente como cociente del seno entre el coseno. Si valor2 es 0, el valor devuelto será igual a PI / 2 o a –PI / 2 radianes, dependiendo del signo de valor1.

Ejemplos:

(ATAN 1 1) (ATAN 1 (* 2 -4.5))

Estas son las tres funciones trigonométricas de AutoLISP. En este punto se nos plantean un par de problemas: ¿cómo calculo las restantes funciones trigonométricas? y ¿cómo convierto grados sexagesimales en radianes y viceversa?

La segunda cuestión es sencilla, ya que basta aplicar al fórmula rad = grados * PI / 180 para convertir grados en radianes. La operación inversa en fácilmente deducible.

La primera pregunta tiene una respuesta no menos sencilla, y es que en la mayoría —por no decir todos— de los lenguajes de programación únicamente nos proporcionan estas funciones trigonométricas básicas y, a partir de ellas, podemos calcular las funciones trigonométricas derivadas inherentes. La manera se explica a continuación mediante notación sencilla de una línea:

Función derivada tación

Secante (sec x) cos (x) Cosecante (cosec x) sen (x) Arco-seno (arcsen x) arctag (x / Ö (1 – x ^ 2)) Arco-coseno (arccos x) 1.5707633 – arctag (x / Ö (1 – x ^ 2)) Arco-secante (arcsec x) arctag (Ö (x ^ 2 – 1)) + signo (x) –1) * 1. Arco-cosecante (arccos x) arctag (1/ Ö (x ^ 2 – 1)) + signo (x) –1) * 1. Arco-cotang. (arccotag x) 1.5707633 – arctag (x)

NOTA: El símbolo ^ significa exponenciación. Ö es raíz cuadrada. signo (x) se refiere al signo del valor; si éste es positivo signo (x) valdrá 1, si es negativo valdrá –1 y si es cero valdrá 0. No debemos preocuparnos ahora por esto, ya que aprenderemos en breve o más

158 Dpl. Ing. Carlos Balderrama Vásquez

Tema 6

NOTA: El intento de extraer raíces negativas de cualquier índice producirá el mismo error explicado en SQRT.

(EXP exponente )

Esta función devuelve la constante (número) e elevada al exponente indicado. Se corresponde con el antilogaritmo natural. Por ejemplo:

(EXP 1) devuelve 2.

(LOG valor )

LOG devuelve el logaritmo neperiano o natural (en base e ) del valor indicado. Por ejemplo:

(LOG 4.5) devuelve 125.

(GCD valor_entero1 valor_entero2 )

Esta sintaxis se corresponde con la función de AutoLISP GCD, que devuelve el máximo común denominador de los dos valores indicados. Estos valores han de ser obligatoriamente enteros, de no ser así, AutoLISP devuelve bad argument type como mensaje de error. Veamos unos ejemplos:

(GCD 45 80) devuelve 5 (GCD 80 70) devuelve 10 (GCD (* 10 10) (/ 70 2)) devuelve 5

Si se indica un entero negativo el mensaje de error de AutoLISP es improper argument.

Las dos últimas funciones matemáticas que veremos pueden sernos de gran ayuda a la hora de programar. Una de ellas (MAX) devuelve el mayor de todos los números indicados en la lista. Su sintaxis es:

(MAX valor1 valor2... )

Los valores pueden ser números enteros o reales, y también expresiones matemático- aritméticas. Así por ejemplo:

(MAX 78.34 –12 789 7)

devolverá 789.0, ya que es el número mayor. Lo devuelve como real por la aparición de decimales en el elemento 78.34. Como sabemos, con la sola aparición de un valor real en una lista, el resultado es real.

Si el elemento mayor de la lista es un expresión matemática, se devolverá su resultado, no la expresión en sí, por ejemplo:

160 Dpl. Ing. Carlos Balderrama Vásquez

Programación en AutoLisp

(MAX (* 10 10) 5)

devolverá 100 como resultado (10 * 10).

Otro ejemplo:

(MAX –5 –7 –9)

devolverá –5.

(MIN valor1 valor2... )

La función MIN, 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:

(MIN 1 2 3 4 7) devuelve 1 (MIN 23.3 7 0) devuelve 0. (MIN (/ 7 3) 0.56) devuelve 0.

Ejemplos de MAX y MIN con variables:

(MIN x y z) (MIN (+ x1 x2) (+ y1 y2) (+ w1 w2) (+ z1 z2))

Y hasta aquí todas las funciones que tienen que ver con operaciones matemáticas. Pasaremos, tras unos ejercicios propuestos, a ver las operaciones de comparación, muy interesantes y sencillas de comprender.

6.4.3. Operaciones relacionales

Las funciones que veremos a continuación se denominan relacionales o de comparación, y es que comparan valores, ya sean numéricos o textuales (cadenas) emitiendo un resultado verdadero o falso, según la comparación. Estas funciones son conocidas por todos (igual, mayor que, menor o igual que...), sólo queda determinar cómo se utilizan y cuál es su sintaxis en AutoLISP.

Como hemos dicho el resultado de la evaluación solo puede ser uno de dos: T (True) que representa el verdadero o cierto, o nil que representa el falso o nulo.

NOTA: Con la devolución nil por parte de AutoLISP nos empezamos a familiarizar ahora y la veremos muchas veces.

Comencemos por el igual o igual que, cuya sintaxis es la siguiente:

(= valor1 [valor2...] )

Computación Gráfica 161

Programación en AutoLisp

Si únicamente se indica un valor, AutoLISP devuelve T.

(< valor1 [valor2...] )

Esta sintaxis se corresponde con la comparación menor que. Es una función AutoLISP que devuelve T si efectivamente el primer valor comparado es menor que el segundo. Si existen diversos valores, cada uno ha de ser menor que el siguiente para que AutoLISP devuelva T. Si no se devuelve nil. Veamos algunos ejemplos:

(< 2 3) devuelve T (< 3 4 5 89 100) devuelve T (< 3 –4 5 6) devuelve nil (< (* 2 2) (/ 5 3)) devuelve nil

En el caso de cadenas o variables alfanuméricas (las que contienen cadenas), la comparación se efectúa según el valor de los códigos ASCII. Por lo tanto, será el orden alfabético ascendente (de la A a la Z) la manera de considerar de menor a mayor los caracteres, teniendo en cuenta que el espacio blanco es el carácter de menor valor y que las letras mayúsculas son de menor valor que las minúsculas. Ejemplos:

(< "a" "b") devuelve T (< "z" "h") devuelve nil (< "A" "a" "b") devuelve T (< "f" "S") devuelve nil

Si las cadenas tienen más caracteres se comparan de la misma forma:

(< "abc" "abd") devuelve T (< "abc" "ab") devuelve nil

No es posible comparar cadenas literales con números; AutoLISP devuelve un mensaje de error que dice bad argument type. Con variables que contienen valores numéricos o literales se realizaría de la misma manera:

(< valor1 valor2 total) (< -12 –7 km hrs) (< autor1 autor2 autor3 auto4 autor5)

(<= valor1 [valor2...] )

Esta es la función menor o igual que. Funciona de la misma forma que la anterior pero teniendo en cuenta que devolverá T si cada valor es menor o igual que el anterior. Si no devolverá nil. He aquí unos ejemplos:

Computación Gráfica 163

Tema 6

(<= 10 30 30 40 50 50) devuelve T (<= 12.23 12.23 14) devuelve T (<= 56 57 57 55) devuelve nil

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

(> valor1 [valor2...] )

Al igual que en la comparación de menor que, pero de manera inversa, esta función devuelve T si cada valor especificado, sea numérico sea cadena, es mayor que el siguiente, esto es, si se encuentran ordenados de mayor a menor. Si no devuelve nil. Por ejemplo:

(> 10 5 4.5 –2) devuelve T (> "z" "gh" "ab") devuelve T (> 23 45) devuelve nil

Otros ejemplos:

(> saldo divid) (> pplanta ppiso pcubierta)

(>= valor1 [valor2...] )

Similar a los anteriores, establece la comparación mayor o igual que. Se devolverá T si y sólo si cada valor es mayor o igual que el que le sucede, si no, nil. Las demás consideraciones son idénticas a las otras funciones similares explicadas. Ejemplos:

(>= 33 23 23 12 12 54) devuelve nil (>= 24 24 24 23 23 0.01 –3) devuelve T

6.4.4. Operaciones lógicas

Además de lo estudiado hasta ahora, existen cuatro operaciones lógicas referidas al álgebra de Boole. Estas operaciones son el Y lógico, el O lógico, la identidad y el NO lógico. Además, existe una quinta función que veremos al final denominada de identidad de expresiones y que es un poco especial.

Las cuatro funciones que vamos a ver actúan como operadores lógicos y devuelven, al igual que las anteriores, únicamente los resultados T (cierto) o nil (falso).

(AND expresión1 [expresión2...] )

Esta función realiza el Y lógico de una serie de expresiones indicadas que representan otras tantas condiciones. Esto significa que evalúa todas las expresiones y devuelve T si ninguna de ellas es nil. En el momento en que alguna es nil, abandona la evaluación de las demás y

164 Dpl. Ing. Carlos Balderrama Vásquez