Anda di halaman 1dari 7

AutoLISP Leccin 4 - FORMATO DE

PROGRAMA
(Abril de 1999)
Un programa AutoLISP se puede escribir de muchas maneras, pero hay algunos puntos
estructurales que son comunes a todos los programas. Aqu aprenders cmo armar un
programa, estructurado en la forma que mejor se adapte a su aplicacin actual.
Una de las principales diferencias entre la programacin en AutoLISP y programacin en
otros idiomas, es AutoLISP es un lenguaje interpretado, como he dicho antes. Eso
significa que se necesita una lnea de cdigo a la vez y evaluar por s mismo. Usted no
tiene que escribir un programa completo para AutoLISP para ser de valor para usted.
AutoLISP tiene tres formas diferentes de un programa puede tomar.
Una expresin: es una lnea de cdigo que se evala y devuelve un valor.
Una funcin: se utiliza en una expresin para hacer el trabajo real.
Una funcin de comando. Una funcin de comando se puede llamar desde la lnea
de comandos de AutoCAD. Esto es lo que normalmente pensamos cuando pensamos
en un programa AutoLISP.
Cada lnea de cdigo que se escribe en AutoLISP ser una lista. La nica cosa que
todas las listas tienen en comn es que todos ellos estn encerrados entre parntesis "()".
Este es el punto ms importante a tener en estos momentos. Usted debe poner todo
entre parntesis, y por cada parntesis abierto, no debe ser un parntesis de cierre.
Contenido
[hide]
1 La expresin
2 La Funcin
3 El Comando Funcin
4 AutoLISP Programas
5 Resumen
6 Ms Lecciones
La Expresin
Una expresin es una lista que comienza con una funcin que el primer elemento de la
lista, el resto de la lista se pasa a la funcin como argumentos. La funcin que se utiliza
en la expresin puede ser una funcin predefinida de AutoLISP, o puede ser una funcin
que se ha definido a s mismo. El resto de la lista debe pasar el nmero correcto de
argumentos a la funcin, o no se ejecutar.
Ejemplo:
(/ 50 25.4)
El ejemplo anterior se convierte 50 en unidades mtricas a unidades estndar. Se puede
acceder desde la lnea de comandos, o se utiliza como parte de un programa ms amplio.
Si yo slo haba pasado un nmero a la funcin / de arriba, puede estar seguro de que no
tendra ran. La misma regla se aplicar a las funciones que usted escribe ms tarde.
Debe pasar el nmero correcto de argumentos a una funcin.
La Funcin
Una funcin es una o ms expresiones recogidas en un formulario en el que pueden
hacer el trabajo. Una funcin debe ser definido antes de que pueda ser utilizado. Una
funcin se define en AutoLISP mediante la instruccin DEFUN.
Ejemplo:
(Defun m (/)
(/ 50 25.4)
)
El ejemplo anterior muestra la forma para definir funciones. La lista comienza con
DEFUN como la funcin de hacer el trabajo. DEFUN necesita tres o ms argumentos. El
primer argumento es el nombre de la funcin que se est definiendo, en el ejemplo se
trataba de "m". El segundo argumento es la lista de parmetros, y en el ejemplo no hay
parmetros. Usted se dar cuenta en la lista de parmetros de un separador de barra,
esto es separar los argumentos a la funcin en la izquierda de la barra, de las variables
locales en el lado derecho de la barra. El tercero y todos los argumentos posteriores son
expresiones de la funcin a realizar cuando se ejecuta. En el ejemplo de la funcin
siempre devolver 50 dividido por 25,4.
La funcin se puede llamar a travs de: (m)
El Comando Funcin
La definicin de funcin para la funcin de comando tiene exactamente la misma forma
como una definicin de la funcin normal, con una excepcin. Cuando se est definiendo
"c:" se coloca delante del nombre del comando argumento.
Ejemplo:
(Defun c: m (/)
(/ 50 25.4)
)
Al hacer la llamada a este tipo de funcin se debe llamar el nombre tal y como est
escrito en la definicin de la funcin.
Ejemplo: (c: m)
Cuando se llama desde el interior de la intrprete de Lisp la funcin de comando debe ser
tratada como cualquier otra funcin. El poder real de la funcin de comando viene al
llamar desde la lnea de comandos. Cualquier funcin puede ser llamada desde la lnea
de comandos, pero la funcin de comando no necesita el parntesis al llamar desde la
lnea de comandos.
Ejemplo: llamada a la funcin normal de la lnea de comandos:
Comando: (m)
Funcin de comando llamada desde la lnea de comandos:
Comando: m
Como se puede ver, ser mucho ms fcil para el usuario para hacer frente estar al
mando de la funcin de las funciones normales. Las funciones de comando son las que
vamos a utilizar para construir los futuros programas.
Programas de AutoLISP
Ahora es el momento de poner todo junto y ver lo que un programa real se ver as.
Cada programa que usted escribe debe salir en busca bsicamente el mismo. Contendr
ciertos componentes que van a ser comunes a todos los programas.
Lo primero que vamos a hacer es crear nuestra cabecera comentario as que sabemos lo
que estamos trabajando, y lo ms importante, cuando volvamos ms tarde para
modificarlo, sabremos lo que trabajamos. La siguiente cosa que usted necesita, es la
definicin del programa.
;; Ttulo: Programa
;; Finalidad: Programa para hacer cosas
;; Escrito: YZ
;; Creacin: 02/05/1998
(Defun c: prog (/)
(Stuff_to_do)
)
La primera cosa que se nota en el programa anterior es que he definido una funcin de
comando. El nombre de archivo para el ceceo debe ser el mismo que el nombre del
comando given.In este caso, el nombre del archivo ser PROG.LSP. La siguiente cosa
que llama la atencin es la lista de parmetros. En este caso, es vaco, pero he incluido
el separador de todos modos. Lo hago as que voy a saber ms tarde cuando regrese a
la misma, que intencionalmente no tener parmetros o variables locales. Con el
parmetro y lista de variables locales all, voy a ser menos probable que se olvide de
agregar valores a la lista, como yo los necesito.
A continuacin vemos la funcin stuff_to_do que se definir ms adelante.
Entonces, finalmente, se cierra el programa con el parntesis de cierre para que coincida
con la apertura de una en el comienzo de nuestra definicin.
La siguiente cosa que necesitamos es algn tipo de rutina de captura de errores, as que
si algo inesperado sucede todo el programa no va a parpadear en la pantalla, dejando a
nuestro usuario totalmente confundido.
(Defun c: prog (/)
(Stuff_to_do)
(Defun * ERROR * (errstr)
(Errstr impresin)
)
)
Ahora tenemos una rutina de comprobacin de errores, que es bastante bsico, pero
conseguir el trabajo hecho por el momento. Todo lo que har es coger la cadena de
error pasado de vuelta de AutoLISP cuando se produce el error e imprimir la cadena de
error en la lnea de comandos.
El listado del programa se muestra ms arriba es suficiente para hacer un programa
simple que se puede utilizar en la lnea de comandos. Como los programas se vuelven
ms complejos, encontrar que es necesario hacer un poco ms de trabajo para
mantener las cosas en orden. Por ejemplo, si queramos pasar algunos parmetros para
nuestro programa y hacer un poco de lgica en base a lo que pasamos en el programa se
hace ms compleja. Nuestro trabajo consiste en evitar que se tan compleja que ya no
entendemos lo que est pasando.
(Defun c: prog (Param1 Param2 /)
(If (= Param1 Param2)
(Progn
(Do_this_stuff)
(Do_that_stuff))
(Progn
(Do_this_other_stuff)
(Do_that_other_stuff)))
(Defun * ERROR * (errstr)
(Errstr impresin)
)
)
Como pueden ver tengo que parmetros Estoy revisando uno contra el otro, y he
decidido que tengo que hacer varias cosas si mis casos se resuelven.
Ahora las cosas estn empezando a ser un poco ms difcil y podra ser mejor si rompa
ciertas cosas en sus propias funciones, slo para que sea ms claro lo que est pasando.
Lo primero que voy a hacer es crear una funcin principal para toda la lgica puede ocurrir
en el mismo lugar. Lo que quiero de mi principal funcin es slo para ver a la parte lgica
del programa, y dejar el trabajo real que hacer para las otras funciones.
(Defun c: prog (Param1 Param2 / prog_main check_params stuff_to_do
do_other_stuff * Error *)
(Prog_main defun (/)
(If (check_params Param1 param2)
(Stuff_to_do)
(Do_other_stuff))
)
(Check_params defun (Item1 Elemento2 /)
(= Item1 Elemento2)
)
(Stuff_to_do defun (/)
(Do_this_stuff)
(Do_that_stuff)
)
(Do_other_stuff defun (/)
(Do_this_other_stuff)
(Do_that_other_stuff)
)
(Defun * ERROR * (errstr)
(Errstr impresin)
)
(Prog_main)
)
Como se puede ver que el programa crece, pero es menos complejo porque ahora
tenemos nuestra lgica contenida dentro de unas pocas lneas de cdigo. Usted puede
seguir la lgica sin tener que entender los detalles de lo que est haciendo el programa.
Cuanto ms grande sea un programa se convierte en el ms importante que es para
ocultar los detalles, y dejar slo la lgica en el frente. Muchas otras cosas han sucedido
aqu, que hace que este estilo de trabajo tan bien. Ahora tenemos variables locales en la
lista de parmetros para nuestro programa. Poner los nombres de las funciones en la
lista de parmetros significa que nuestro programa termina, la vida de las funciones que
estamos usando extremo tambin. Si no los hubiramos incluido en la lista de parmetros
que todava estaran ocupando la memoria, incluso despus de que el programa haba
terminado. Debemos dejar de memoria lo ms limpio posible cuando terminamos nuestro
programa, y listas de parmetros son la manera ms fcil de mantener limpia la memoria.
Usted puede haber notado que Param1 y Param2 no estn incluidos en la lista de
parmetros. Esto se debe a Param1 y Param2 son parmetros que se pasan a una
funcin y su vida termina cuando termina la funcin, por lo que no es necesaria la
limpieza. Observe tambin al pasar Param1 y Param2 a check_params les he dado
nombres diferentes en la definicin de funcin para check_params. Al pasar variables a
una funcin se debe utilizar nombres diferentes dentro de la funcin as que no hay
confusin sobre las que se est trabajando en variable.
La variable nombrada en la lista de parmetros no es la variable que existe fuera de la
funcin. Incluso si tienen el mismo nombre que ellos no son la misma variable. La
variable en la lista de parmetros es local a la funcin que se llama, y es slo una copia
de la que se pasa la variable. Lo que esto significa es que si usted cambia la variable
dentro de la funcin de la variable que se pasa a la funcin no se cambia. Esto no
debera realmente importa, sin embargo, porque no es una buena idea para trabajar en
las variables que se pasan a una funcin. Variables pasados a una funcin slo se debe
utilizar para trabajar en el valor que usted est tratando de volver de la funcin.
Usted puede haber notado que he dado el cheque en la instruccin IF su propia funcin.
Esto hace que la lgica en la funcin prog_main ms fcil de seguir. La forma en que
est escrito que no tengo que saber lo que se est marcada, slo tengo que saber si era
cierto o no.
Resumen
Usted ya debe saber la disposicin bsica de un programa AutoLISP. Las razones por
las que necesitamos para estructurar nuestros programas son variados pero ciertas
razones siguen viniendo una y otra vez, as que voy a enumerar aqu.
1. reas susceptibles de cambiar.
2. Los datos complejos
3. Lgica compleja
Todas las regiones, lo que parece complejo, probablemente debera trasladarse a su
propia funcin de donde se puede controlar la interfaz a la funcin.
Su programa debe limpiar la memoria. Funciones deben ser localizados a slo aquellas
reas del programa de necesitarlas. Las variables deben ser mantenidos local para la
funcin de su uso. Las variables globales se deben evitar si es posible.
Proper comentando deben incluirse para hacer cada parte del programa obvia. Si el
nombre de sus funciones y variables correctamente, puede reducir el nmero de
comentarios necesarios para aclarar las cosas.

Anda mungkin juga menyukai