Autolisp
Autolisp
Autolisp
SINCOW
MANUAL DE AUTOLISP
www.sincows.com
[email protected]
ISLA FERNANDINA N42-52 (CIUDADELA JIPIJAPA),
TELE/FAX: 2920-890, 2431-356
QUITO-ECUADOR
www.sincows.com [email protected]
I. INTRODUCCIÓN
Dentro del AutoCAD nos encontramos un lenguaje de programación que usa un interprete de nombre AutoLISP, este es una forma
común del lenguaje LISP, el cual a su vez es el lenguaje más antiguo en aplicaciones de inteligencia artificial. El AutoLISP coexiste con el
AutoCAD y puede ser usado en cualquier momento que se este editando un dibujo. Este lenguaje provee herramientas comunes a otros paquetes
de programación para estructurar el flujo de un programa, manipula datos del AutoCAD, así como datos propios, tiene opciones de entrada y
salida I/O para la creación y lectura de archivos ASCII. Presenta además la capacidad de poder activar cualquier comando que venga dentro del
AutoCAD así como también puede manipular informaciones propias de un dibujo realizado en AutoCAD, tal es el caso de manejar entidades
(Líneas, arcos, círculos, poli-líneas, etc.), así como también tipos de líneas, estilos "styles", niveles "Layers", etc.
El lenguaje LISP original tenía la posibilidad de definir funciones en forma recursiva, esto significa que la función era usada al interior
de si misma asignándole las variables de entrada, esta capacidad presenta también el AutoLISP. Mas lamentablemente no hay información sobre
el uso del AutoLISP con funciones recursivas, pero cualquier libro que haga referencia a la recursividad en el lenguaje LISP puede ser de ayuda
para el estudio de funciones recursivas dentro del AutoLISP, pues con algunos cambios los programas en LISP podrán ser ejecutados al interior
del AutoLISP, en particular la versión de XLISP es la más recomendada pues es la que presenta el mayor parecido con el AutoLISP.
Los paréntesis son vitales para escribir cualquier instrucción en AutoLISP, sea esta una simple expresión o sea un programa
completo, digamos además que el abrir y cerrar paréntesis permiten al AutoCAD distinguir entre los comandos propios del paquete y las
expresiones del AutoLISP. Cada vez que el AutoCAD detecta un paréntesis abierto, interpreta que se refiere a una expresión de AutoLISP y esta
pasa en su totalidad, hasta el paréntesis que la cierra, a ser evaluada por el AutoLISP, el cual da un resultado al AutoCAD que puede usarlo y
continuar con sus operaciones propias.
El nombre de la función, que puede ser propio del Expresión AutoLISP Resultado
AutoLISP o creado por el usuario, relaciona a los argumentos que (+ 5 3) 8
vienen a continuación. Los argumentos a su vez pueden ser otras (+ 2 4 5) 11
funciones, variables o constantes. Veamos por ejemplo la siguiente (/ 5 3) 1
expresión dada en AutoLISP: (/ 5.0 3) 1.6667
(- 15 3 8) 4
(* 3 2) (+ (* 2 3) 1 (- 4 7)) 4
Expresiones aritméticas en AutoLISP y su resultado.
La expresión anterior se podrá tipiar en cualquier momento,
como ya se dijo anteriormente, y corresponderá a la operación de multiplicación de los argumentos que vengan a continuación en este caso los
valores constantes de 3 y 2, el AutoLISP evaluará esa expresión dando un valor de 6.
En la tabla No. 1 se puede apreciar algunas expresiones aritméticas en AutoLISP y el resultado que daría el programa. Para mayor
información sobre las expresiones aritméticas véase pág 6.
Antes de correr cualquier programa de AutoLISP, es indispensable setear cierto tipo de información dentro del DOS. En primer lugar
setearemos las variables LISPHEAP y LISPSTACK, lo cual se hará desde el DOS de la siguiente manera:
SET LISPHEAP=20000
SET LISPSTACK=8000
Los valores de 20000 y 8000 pueden ser cambiados, pero las sumas de estas dos cantidades no puede exceder de 45000.
Otra variable que requiere ser seteada antes de trabajar con el AutoCAD es ACADFREERAM, la cual permite setear mayor cantidad
de memoria RAM libre para uso del AutoCAD. Se tipiará en pantalla lo siguiente:
SET ACADFREERAM=20
El valor de 20 también puede ser alterado de acuerdo a las necesidades del usuario, pero no se recomiendan valores mayores a 32, ni
menores a 20. Si el valor de esta variable no es seteado el AutoCAD le asignará un valor de 14.
III. VARIABLES
2
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Existen unas variables propias del sistema que podrán ser manipuladas a través del comando SETVAR.
╔═══════════════════════════════════════════════════════════════╗
CARACTERES NO RECOMENDADOS PARA NOMBRES DE VARIABLES
Variable string: Tiene valores de texto ubicadas ente comillas para identificar el valor como un string. Algunas variables del sistema (Ver
comando SETVAR) son del tipo string, tal es el caso de la variable CELTYPE, que tiene asignado un valor "BYLAYER" entre otras.
Enteras: Son números positivos o negativos los cuales no tienen fracciones o puntos decimales. El valor de 5 sería un típico ejemplo de un valor
entero mientras que el valor 5.0 será considerado por el AutoLISP como un valor real y no como un valor entero. Los valores enteros deberán
estar entre -32768 y +32767. Para valores enteros fuera de estos rangos causará valores erróneos.
Algunas variables del sistema toman valores enteros, tal es el caso de la variable BLIPMODE que puede tomar valores de 0 para
desactivado y 1 para activado.
Reales: Es un número que incluye decimales de punto flotante. Si se desea escribir el valor de 0.134 no se lo podrá escribir como .134, pues esto
producirá un error, por lo que tendremos que escribirlo con el 0 inicial.
Algunas variables del sistema tienen asignados valores reales. Demos algunos ejemplo de este tipo de variables: FILLETRAD,
TEXTSIZE, AREA, etc.
Listas: Es una variable que contiene más de un valor o una serie de valores. Los puntos o coordenadas son un tipo de listas que están
constituidos por dos (2D) o tres (3D) elementos numéricos y que representan una coordenada.
En las variables del sistema de nombre LASTPOINT, LIMMIN, LIMMAX, etc tienen asignado variables del tipo coordenada.
Pickset: Una tabla que contiene puntos de elementos gráficos, del set de selección creados con cualquier opción de selección de objetos en
AutoCAD, por ejemplo: window, crossing, etc.
Ename (Nombre de una entidad): Este es un tipo de variable que representa al nombre de una entidad. A partir de ella se podrá generar una
lista donde este comprendida toda la información respecto a la entidad, ver comando ENTGET página 12.
ATOMLIST Se recomienda no usar nombres de funciones del AutoLISP, como nombres de variables. El ATOMLIST es una variable en el
AutoLISP que guarda todos los nombres de funciones definidas y nombres de variables. Se puede mirar esta lista tipiado lo siguiente:
!atomlist
3
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Todas las variables o funciones creadas por el usuario se irán integrando a esta lista, supongamos que hemos tipiado dentro del
AutoCAD lo siguiente:
Despues de dar estas dos expresiones en AutoLISP, activamos la variable ATOMLIST, tendremos entonces en pantalla la siguiente
lista, Ver 4:
Command: !ATOMLIST
(ELE GUS INTERS GRREAD GRTEXT GRDRAW GRCLEAR TBLSEARCH TBLNEXT ENTUPD ENTMOD ENTSEL ENTLAST
ENTNEXT ENTDEL ENTGET SSMEMB SSDEL SSADD SSLENGTH SSNAME SSGET ANGTOS RTOS COMMAND OSNAP
REDRAW GRAPHSCR TEXTSCR POLAR DISTANCE ANGLE INITGET GETKWORD GETCORNER GETINT GETSTRING
GETORIENT GETANGLE GETREAL GETDIST GETPOINT MENUCMD PROMPT SETVAR GETVAR TERPRI PRINC PRIN1 PRINT
WRITE-LINE READ-LINE WRITE-CHAR READ-CHAR CLOSE OPEN STRCASE ITOA ATOF ATOI CHR ASCII SUBSTR STRCAT
STRLEN PAUSE PI MINUSP ZEROP NUMBERP FLOAT FIX SQRT SIN LOG EXPT EXP COS ATAN 1- 1+ ABS MAX MIN NOT OR
AND > >= /= = <= < ~ GCD BOOLE LSH LOGIOR LOGAND REM * - + ASSOC MEMBER SUBST LENGTH REVERSE LAST
APPEND CDDDDR CDDDAR CDDADR CDDAAR CDADDR CDADAR CDAADR CDAAAR CADDDR CADDAR CADADR
CADAAR CAADDR CAADAR CAAADR CAAAAR CDDDR CDDAR CDADR CDAAR CADDR CADAR CAADR CAAAR CDDR
CDAR CADR CAAR CDR CAR CONS COND LISTP TYPE NULL EQUAL EQ BOUNDP ATOM NTH PAGETB PICKSET ENAME
REAL FILE STR INT SYM LIST SUBR T MAPCAR APPLY LAMBDA EVAL *ERROR* / QUIT EXIT _VER VER IF UNTRACE
TRACE DEFUN FOREACH REPEAT WHILE PROGN FUNCTION QUOTE READ LOAD SETQ SET MEM VMON ALLOC EXPAND
GC ATOMLIST)
Command: Lista guardada en la variable ATOMLIST. Obsérvese la incorporación de las variables GUS y ELE dentro de la lista.
IV. EXPRESIONES
Una expresión en AutoLISP, empieza con un paréntesis y finaliza con un paréntesis que cierre al primer paréntesis.
V. ÁTOMOS Y LISTAS
4
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Ciertos átomos tienen valores estandares, el átomo NIL tiene el valor NIL, el átomo T tiene el valor T (verdad), y algunos átomos
numéricos tales como 14, 3.347, o -6.78E9, tienen los valores entero o número flotante correspondientes.
Una lista es definida recursivamente como una secuencia de 0 a más elementos encerrados entre paréntesis: (elemento1 .......
elementon).
Una lista puede ser asignada a una variable conteniendo múltiples valores. Cada valor es llamado un elemento.
Un punto en el dibujo esta constituido por una coordenada X y una coordenada Y, y si se encuentra en el espacio se incluirá una
coordenada Z. Para el AutoLISP estas coordenadas podrían estar descritas por una simple variable, constituida esta variable a su vez por una lista
de 2 o 3 elementos según sea le caso, el primer valor de la lista lo constituirá la coordenada X, el segundo la coordenada Y y si existe el tercer
valor corresponde a la coordenada Z.
Si el usuario tiene interés de dar una lista antecederá la palabra LIST para indicar que corresponde a una lista. Veamos por ejemplo las
siguientes listas marcadas:
(LIST "Hola" "Chao") Lista constituida por 2 elementos del tipo carácter alfa-numérico.
(LIST 6 8 90 67 89 830) Lista formada por 6 números enteros
(LIST 3 2.2 7 "Elenita") Lista formada por 2 números enteros, un número de punto flotante y un "string" o caracteres alfa-numéricos.
El AutoLISP describe una entidad simple a través de una lista la cual puede contener el nombre de la entidad, el tipo de entidad
(líneas, arcos, círculos, etc), el nivel "Layer" asociado, y las coordenadas. Veamos a continuación un ejemplo de lista que describe una entidad:
((-1 . <Entity name: 6000020>) (0 . "LINE") (8 . "PR") (10 . 75.0000 212.0000) (11 . 324.0000 83.0000))
El ejemplo anterior representa a una línea con un nivel o "layer" asociado de nombre PR, y va desde la coordenada (75 212) a la
coordenada (324 83).
Se puede también tener en forma de una lista los Bloques, Estilos de texto, Tipos de líneas, nombres de vistas, en listas. Veamos
algunos ejemplos de esta representación:
((0 . "STYLE") (2 . "GUS") (70 . 0) (40 . 0.0000) (41 . 1.0000) (50 . 0.0000) (71 . 0) (42 . 0.1250) (3 . "ROMANS") (4 ""))
El primero corresponde a un nivel o "layer" de nombre prueba con un tipo de línea continua. La segunda lista corresponde a la
definición de un estilo de texto, el cual tiene un nombre de GUS y tiene asociado una forma de texto o "Font" de nombre ROMANS.
Para asignar un valor a una variable usaremos la función SETQ, esta función dice al AutoLISP que asigne un valor a una variable, si
deseamos por ejemplo asignar el valor 3.1416 a la variable de nombre PIE, lo haríamos de la siguiente manera
La expresión SETQ es una abreviación de Set quote. El quote es una función que evita que sean evaluados átomos o listas. Por lo
tanto el valor 3.1416, para el caso de nuestro ejemplo, será asignado directamente en la variable PIE.
La expresión SET trata de evaluar cada uno de sus argumentos antes de ser asignados los valores. Veamos un ejemplo:
Para este caso el AutoLISP tratará en primer lugar de evaluar el valor de PIE y después asignará al resultado de esa evaluación el valor
de 3.1416. Por lo tanto pie deberá ser una expresión previamente definida, pues en caso contrario el AutoLISP no producirá ningún tipo de
asignación y dará un mensaje de error.
Se puede asignar una variable a una lista para ese caso la lista puede ser obtenida a través de algún otro comando que crea listas como
resultado o el usuario puede dar la lista. Veamos a continuación 4 asignaciones a variables de listas, la última de ellas usa un comando que crea
una lista con la información del nivel o layer asociado:
5
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
El AutoLISP permite usar expresiones matemáticas, las cuales son comunes a otros lenguajes de programación, mas no su
nomenclatura, pues si deseamos realizar la suma 3+6, la escribiremos en muchos lenguajes de esa misma forma, mientras que en AutoLISP el
formato es diferente, y lo haremos de la siguiente forma: (+ 3 6), obteniendo así el resultado de 9.
Las dos últimas expresiones no son posibles de realizarlas en lenguajes comunes de programación. Con excepción del lenguaje "C",
que si permite este tipo de asignación de variables, aún cuando la nomenclatura es un tanto más difícil.
Lo que se dice frente a las dos últimas expresiones que se muestran en la parte superior, permite hacer ciertas puntualizaciones
respecto a la manera en que el AutoLISP evalúa las expresiones, esto es que la evaluación de una expresión cualquiera la realiza de izquierda a
derecha y de los paréntesis más interiores a los más exteriores. Cuando una expresión se encuentra dentro de otra expresión la totalidad de esta
expresión interna es evaluada, pasando luego a la siguiente expresión (que se encuentra a la derecha). Una gran ventaja del usar paréntesis dentro
de las expresiones es que el usuario nunca escribirá una fórmula que será evaluada en forma diferente a la que éste lo desea.
Digamos además que dentro de cualquier expresión matemática en la que todos sus argumentos son enteros, el resultado será un valor
entero y cualquier parte fraccional será eliminada. Si algún argumento es real, el resultado será un real.
Un grupo de comandos dentro del AutoLISP se pueden usar para ingresar datos a través del teclado o en algunos casos a través de
marcar uno o dos puntos en el dibujo.
6
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Despues de escribir el mensaje el programa esperará que se de el valor numérico que se desea asignar a la variable re. En el ejemplo el
valor es 56, mas este valor será guardado como un número real dentro de la variable re. Si se tipea por error un "string" el programa dará un
mensaje de error y regresará a preguntar nuevamente el valor real.
VIII.2. GETINT Este comando interroga sobre un valor entero que el usuario deberá dar a través del teclado.
Si se introduce un valor con decimales el valor numérico no será ingresado y pedirá al usuario que vuelva a dar el valor, a
continuación ilustramos con un ejemplo lo dicho:
VIII.3. GETANGLE Responde con el ángulo que existe entre dos puntos marcados o a través de dar el valor numérico de ángulo. Para el caso
en el cual se da un valor en grados el AutoLISP lo transformará en un ángulo en radianes, esto es para el caso en el cual el usuario ha tipeaqdo el
valor de 30 grados el AutoLISP lo integrará dentro de sí con un valor de 0.523598, esto hay que tener muy en cuenta pues todas las funciones
trigonométricas o sea que manejan ángulos lo hacen siempre en radianes, lo cual es una clara diferencia con el uso de ángulos en AutoCAD.
El tipo de variable que se tiene al usar este comando será del tipo real.
Ejemplos:
VIII.4. GETCORNER Responde con una coordenada en dos dimensiones, que corresponde a la segunda esquina de un rectangulo marcado.
Como se entenderá el dato será del tipo de lista constituida por dos elementos. El primer elemento se conoce como "punto base", y este siempre
deberá ser dado
7
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Ejemplos:
VIII.5. GETPOINT Responde con una coordenada en forma similar a la función GETCORNER, aun cuando para ese caso el "punto base" es
impresindible mientras que para el GETPOINT es opcional.
Ejemplos:
Command: (getpoint "Marque el punto")
Marque el punto: Se deberá marcar el punto a través de cualquier opción conocida
VIII.6. GETDIST Esta opción responde con un valor real, que puede ser producto del cálculo de la distancia entre dos puntos que el usuario
marque o simplemente un valor númerico tipeado desde el teclado
Ejemplos:
Command: (Getdist "Marque la distancia: ")
Marque la distancia: 6
6.0000
Cuando se a activado alguna instrucción GET, dentro del menú será necesario producir una pausa despues de la instrucción GET, tal
como se muestra a continuación
8
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Para seleccionar y encontrar los vértices de una poli-línea primero deberá ser seleccionada la poli-línea a través de cualquiera de las
opciones de selección. Veamos el siguiente ejemplo:
(set ed (entsel))
(entget ed ) Características generales de la poli-línea donde no se tiene las coordenadas de los vértices. Para obtenerlos se deberá escribir lo
siguiente:
En la variable rw se guardará el nombre de la entidad que corresponde al primer vértice de la poli-línea. Para obtener el segundo
vértice se deberá escribir lo siguiente.
El lenguaje LISP es uno de los lenguajes más antiguos de programación para inteligencia artificial, la versión más antigua fue la 1.5,
descrita en 1962 en la revista "Programmers Manual" escrita por McCarthy.
El nombre LISP resulta de unir las palabras "List Programming", este lenguaje tiene una estructura de datos que podríamos llamar
"estructura en listas", en la mayoría de situaciones en la programación en LISP, un dato puede tener la forma de una lista o un átomo. El atributo
más importante que un átomo puede tener, además de su nombre, es el tener un valor, al igual que las variables.
Ciertos átomos tienen valores estándares, el átomo NIL tiene el valor NIL (nulo, fin de archivo o fin de ejecución del programa), el
átomo T tiene el valor T (verdad) y algunos átomos numéricos tales como 14, 3.347, o -6.78E9, tienen los valores entero o número flotante
correspondiente.
Una lista es definida recursivamente como una secuencia de 0 o más elementos encerrados entre paréntesis.
(elemento1 .....elementon)
El LISP presenta una serie de posibilidades, tanto para manejar variables, expresiones aritméticas e incluso comandos completos
dentro de una misma definición, permitiendo de esta manera crear verdaderos comandos.
Las variables dentro del LISP pueden ser de cuatro tipos: variable entera, real, "string" (alfa numérica) o una coordenada. El tipo de
variable es automáticamente asignado. Todo valor esta asociado a un tipo de variable. Es posible además nombrar a las varibales con uno o
varios caracteres, cuyo primer caracter es una letra del alfabeto.
Se dispone además de funciones aritméticas, trigonométricas y geométricas, veamos algunos ejemplos de ellas:
Las funciones anteriores n son todas las que se dipone dentro del LISP, pues la inteción es solamente ilustrar como se expresan las
funciones dentro del lenguaje al que nos referimos.
El LISP dispone además de instrucciones condicionales, tal es el caso del (IF condición (acción)), o el (COND). Lazos lógicos como
(WHILE) (PROGN), etc.
9
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Veamos el ejemplo característico con que se suele ilustrar en los libros que hacen referencia al LISP y a la recursividad, el cual es el
cálculo del factorial de un número.
Este programa define una función de nombre factorial con una "variable global" de nombre n, la cual va a ser manipulada en forma
recursiva.
Esto producirá la siguiente evaluación: En primer lugar a la variable n se le asigna el valor de 4 y entraría a evaluar la expresión
(CON...). El COND toma un par de expresiones cada vez, el primer par es ((EQ n 1) 1), si el primer par es evaluado como verdad T, el valor de
la derecha de la expresión será asignado, en este caso el valor 1. Si la expresión es evaluada como NIL (falso) el próximo par será evaluado (T (*
n (factorial (1- n))), T siempre T y por tanto se procederá a calcualr la expresión (* n (factorial (1- n))), la cual para el valor que asignamos sería:
La última línea evaluará la expresión ((EQ n 1) 1) como verdad por lo que saldríamos de la función factorial con el valor de 24, para
este ejemplo.
En primer lugar tenemos la necesidad de crear una suma exponencial de enteros sucesivos entre los valores b y a, para lograrlo
revísese la funcion ses que se muestra a continuación:
(DEFUN ses (b a)
(COND ((> b a) 0)
(T (+ (EXP 1)
(ses (+ b 1 a)))))
La función ses anteriormente ilustrada podríamos generalizarla para cualquier tipo de operador, reemplazando la función EXP por un
nombre cualcuiera y lo concluiríamos como una variable más de la función a definirse. Observemos esta generalización en el programa sum, en
el cual su primer elemento deberá ser una función, como: EXP, SIN, COS, TAN, etc.
La función seno definida como una serie de potencia tiene la siguiente forma:
1
Para mayor claridad, las funciones propias y originales del LISP las escribo con mayúsculas,
mientras que las variables y funciones que se van creando en el desarrollo de un programa las
escribo con letras minúsculas, lo cual es indiferente para el LISP, ya que éste las transforma a
mayúsculas.
10
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
11
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
12
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
Se puede usar la suma de dos o más valores cualquiera. Por ejemplo si se pone el número 6 (2 + 4) significará que no se podrá ingresar ni
valores negativos ni cero.
El "string" opcional define una lista de palabras claves como entradas aceptables a una función GETxxx.
Ejemplo: (INITGET 1 "XP XN YP YN ZP ZN")
(GETPOINT (GETVAR "LASTPOINT"))
Se podrá marcar además de una coordenada las letras XP XN YP YN ZP o ZN.
INTERS (INTERS pt1 pt2 pt3 pt4) Responde con el punto que corresponde a la intersección de las líneas que forman pt1 con pt2 y pt3 con pt4.
ITOA (ITOA integer) Convierte enteros a "strings"
LAMBDA (LAMBDA argument expression ...) Define una función en línea proveyendo de argumentos a expresiones para su evaluación. Ej. (SETQ F
'(LAMBDA (X H) (* X H)))
LAST (LAST list) Función de un argumento (Una lista). Este responde con el último elemento de la lista planteada
LENGTH (LENGHT list) Función de un argumento. Esta responde con un entero, que corresponde al número de elementos de una lista.
LIST (LIST expresion) Para asignar una lista de valores. Una lista es un grupo de elementos de cualquier clase de datos, tratados como una
expresión y almacenados una una sola variable. Una lista en el AutoLISP puede contener cualquier numero de variables reales, enteros o
"strings". Cualquier cosa que este entre paréntesis es una lista.
LISTP (LISTP arg1) Responde T si arg1 es una lista o hil en caso contrario.
LOAD (LOAD Nombre_archivo expresion) Para cargar archivos de programa en AutoLISP, La expresión se evaluará si la cargada de la función
falla.
LOG (LOG arg) Logaritmo natural de arg.
LOGAND (LOGAND num1 num2 num3 ....) Es el "and" o "Y númerico" lógico entre los números equivalentes binarios de num1, num2, num3,....
Los números solo pueden ser enteros, y el resultado es un número decimal. Ejemplo: (logiand 11 12) Resultado: 8 ; Esto es por que el
número 11 corresponde a 1011 y el 12 a 1100 en binario, si aplicamos el and lógico se obtiene el binario 1000 equivalente al número 8
LOGIOR (LOGIOR num1 num2 num3...) Es el "o" numérico lógico. Ejemplo: (logior 11 12) Resultado: 15.
LSH (LSH number numberbits) Regresa el resultado de la ejecución de una función lisp en los elementos de una o más listas.
MAPCAR (MAPCAR function list) Regresa el resultado de la ejecución de una función lisp en los elementos de una o más listas. Ej. (MAPCAR F '(3
4 5 6.1) '(4 5 8.8 9.1)) Resulta (12 20 44 55.51). Veamos otro ejemplo del uso del comando mapcar (mapcar '+ (list 1.2 7.7 5.6 3.8) (list 0.9
8.7 6.5 4.3)) Resultado: (2.1 16.4 12.1 8.1)
EJEMPLOS:
(Setq a 3.3 b 2.2 c 1.1)
(MAPCAR '+ (LIST A B C) (LIST 3 4 6)
Respuesta: (6.3 6.2 6.1)
(MAPCAR 'SIN (LIST B A C))
13
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador
www.sincows.com [email protected]
16
Isla Fernandina N42-52 (Ciudadela Jipijapa) Teléfono/fax: 920-890, 431-356
Quito-Ecuador