Você está na página 1de 13

0.

Introduccin
0. Introduccin
1. El Entorno de Desarrollo Visual LISP
2. Tcnicas Fundamentales
3. Acceso a la Base de Datos Geomtrica.
4. Visual LISP Avanzado
5. Ejercicios
LISP se encuentra entre los ms antiguos lenguajes de programacin de alto nivel an en uso
generalizado. Fue desarrollado alrededor de 1958 por John McCarthy. La idea de LISP surgi a partir
de un sistema lgico llamado "lambda calculus'' desarrollado por Alonzo Church. Existen diversas
variantes (o dialectos) de LISP, entre las cuales se encuentran Scheme, T, etc. LISP lleg a ser
fundamental como lenguaje de programacin para las investigaciones de Inteligencia Artificial, y
sigue an hoy siendo uno de los ms utilizados en este campo. En la dcada de los '80 se intent
estandardizar el lenguaje. Como resultado surgi el Common LISP cyas especificaciones se recogen
en Common LISP: The Language, 2nd Edition (CLTL2). Common LISP es actualmente el dialecto
ms difundido y la base para el desarrollo de numerosas implementaciones.

Las razones para ello se encuentran en el hecho de poseer una de las formas de sintaxis menos
restrictivas entre los lenguajes de alto nivel. Esto facilita su aprendizaje, al ser muy corto el nmero
de estructuras y funciones que el estudiante debe conocer para llegar a dominar las tcnicas de
programacin en este lenguaje. De hecho, este curso se propone la utilizacin de un subconjunto de
las muchas funciones disponibles para con ellas examinar las tcnicas que hacen de LISP un
lenguaje tan especial.

LISP: PARADIGMA DEL ESTILO DE PROGRAMACIN FUNCIONAL

Una de Las caractersticas de LISP es la posibilidad de tratar las propias funciones como datos. En
LISP, funciones e incluso programas enteros pueden ser utilizados directamente como entrada a
otros programas o subrutinas. En esto el prototipo para la concepcin del lenguaje ha sido la
estructura de las funciones matemticas. Todos sabemos cmo resolver una expresin del tipo (8 *
((17 + 3) / 4)). Primero hallaramos el resultado de 17 + 3, que entonces dividiramos entre 4, para el
resultado multiplicarlo por 8. Es decir, que iramos resolviendo los parntesis ms interiores y
pasando los resultados a las operaciones descritas en los parntesis que los contienen.

(* 8 (/ (+ 3 17) 4)) sera la funcin LISP equivalente.

*, / y + son nombres de funciones LISP. Los nmeros en (+ 3 17) son los argumentos que se
pasan a la funcin '+'. Pero en (/ (+ 3 17) 4) a la funcin '/' se le est pasando un argumento
numrico 4, pero tambin (+ 3 17), otra funcin con dos argumentos numricos. Esta es la esencia
de un lenguaje de programacin funcional y por eso decimos que LISP lo es. "Programacin funcional
significa, seg Graham (On Lisp, pg. 28), escribir programas que operan a base de devolver valores
en lugar de producir efectos colaterales. Estos efectos colaterales incluyen cambios destructivos en
los objetos y la asignacin de variables (con setq, por ejemplo)." Sigue explicando Graham (pg. 31)
que "una funcin destructiva es una que puede alterar los argumentos que se le pasan. Slo unos
pocos operadores LISP estn pensados para producir efectos colaterales. En general, los
operadores propios del lenguaje estn pensados de manera tal que se invoquen para obtener los
valores que devuelven. Nombres como sort (vl-sort), remove (vl-remove) o substitute (subst)
no deben llamarnos a engao. Si usted quiere efectos colaterales, utilice setq sobre el valor
devuelto. Esta misma regla sugiere" -sigue explicando Graham- "que algunos efectos colaterales son
inevitables. Tener la programacin funcional como ideal no implica que los programas nunca
debieran tener efectos colaterales. Slo quiere decir que no deben tener ms de los necesarios."

Esta caracterstica de la programacin funcional no es arbitraria. Citando de nuevo a Graham:

Los programadores LISP no adoptaron el estilo funcional por razones meramente estticas. Lo usan
porque facilita su trabajo. En el entorno dinmico de LISP, los programas funcionales pueden ser
escritos a una velocidad poco usual, y a la vez, pueden ser inusualmente confiables.
En LISP es comparativamente fcil el depurar los programas. Una gran cantidad de informacin se
encuentra disponible en tiempo de ejecucin, lo que ayuda en el rastreo de los errores. Pero an
ms importante es la facilidad con la que pueden probarse los programas. No es necesario el
compilar el programa para probar su funcionamiento como un todo. Podemos probar las funciones
individualmente, llamndolas desde el nivel superior del evaluador.
Esta comprobacin de carcter incremental es tan valiosa que el estilo de programacin LISP ha
evolucionado para aprovecharla. Los programas escritos en un estilo funcional pueden ser
comprendidos una funcin a la vez, y desde el punto de vista del lector, esta es su principal ventaja.
Sin embargo, el estilo funcional se adapta perfectamente a la comprobacin incremental: los
programas escritos en este estilo pueden ser tambin probados una funcin a la vez. Cuando una
funcin ni examina ni altera el estado exterior, los errores se harn aparentes de inmediato. Una
funcin as diseada slo puede afectar el mundo exterior a travs de los valores que devuelve. En
la medida que estos valores sean los esperados, podemos confiar en el cdigo que los produjo.
Los programadores LISP experimentados de hecho disean sus programas de manera que puedan
ser fcilmente probados:

1. Tratan de aislar los efectos colaterales en unas pocas funciones, de manera que la
mayor parte del programa pueda ser escrito en un estilo puramente funcional.
2. Si una funcin debe producir efectos colaterales, tratan de que al menos posea una
interfaz funcional.
3. Le dan a cada funcin un propsito nico y bien definido

Cuando acaba de escribirse una funcin, pueden probarla sobre una seleccin de casos
representativos, y una vez hecho esto pasar a la prxima funcin.

En LISP, como en cualquier otro lenguaje, el desarrollo se lleva a cabo en ciclos de escritura y
comprobacin. Pero en LISP el ciclo es muy corto: funciones aisladas, e incluso partes de funciones.
Y si comprobamos todo a medida que lo escribimos, sabremos dnde buscar cuando se produzca
un error: en lo ltimo que se escribi.
Graham, On Lisp, pg. 37 y 38.

Lisp mas all de AutoCAD

Hay implementaciones de LISP para uso en el desarrollo de aplicaciones de todo tipo. El lenguaje
se ha normalizado con el nombre de Common LISP (norma ANSI).
Existen entornos de desarrollo disponibles muchas veces como software gratuito a travs de internet.
Para ms informacin se recomienda acceder a los siguientes sitios WEB*:

Compiladores y entornos de desarrollo Common LISP para WINDOWS:

LispWorks
Allegro CL
Corman Common Lisp
CLISP

Los tres primeros son productos comerciales, pero todos ofrecen versiones gratuitas de evaluacin
perfectamente adecuadas para el aprendizaje del lenguaje.
CLISP es totalmente gratis (GPL).

LispWorks es especialmente recomendable por su claro entorno de desarrollo (IDE), la capacidad


de construir fcilmente aplicaciones con una interfaz grfica de usuario (GUI) y la licencia de
evaluacin que permite el utilizar el producto por tanto tiempo como se desee, con slo unas
limitaciones de menor entidad. Le acompaa una muy completa referencia en formato HTML y PDF.

Allegro CL posee herramientas para el desarrollo de interfaces grficas mucho ms completas, pero
la licencia de evaluacin debe ser renovada cada mes.

Corman LISP slo brinda la posibilidad de utilizar el IDE como evaluacin durante un mes, aunque
el compilador en s es gratuito y posee una consola LISP tambin gratuita. Para Corman Common
Lisp el profesor Reini Urban ha implementado la posibilidad de su ejecucin desde el entorno
AutoCAD lo que que pudiera sealar un camino de desarrollo interesante para el futuro.

Tutoriales en la Red:

El libro de David Touretzky "Common Lisp: A Gentle Introduction to Symbolic Computation", que est
disponible en formato PDF.
El libro de David Lamkins "Successful Lisp: How to Understand and Use Common Lisp" en formato
html.
La Common LISP HyperSpec, de Kent Pitman, que no es un tutorial, sino la referencia definitiva del
lenguaje. Cortesa de la casa que comercializa LispWorks.
El libro de Guy Steele "Common LISP, the language. 2nd Edition", ms conocido
como CLTL2, aunque anterior a la norma ANSI, an merece ser ledo.
Si se trata de comprar un libro, lo recomendable sera comenzar, ya sea con el de Paul
Graham "ANSI Common Lisp"o con el de Stephen Slade "Object-Oriented Common LISP".
Despus, el PAIP ("Paradigms of Artificial Intelligence Programming") de Peter Norvig es una lectura
obligada.

En la Web sera necesario visitar el CLiki y la pgina de ALU (Association of LISP Users) para ms
enlaces de inters.

Un caso particular es el del Corman Common Lisp, para el que Reini Urban ha implementado la
posibilidad de su ejecucin desde el entorno AutoCAD y que pudiera sealar un camino de desarrollo
interesante para el futuro. Tambin existen utilidades para la transferencia de programas AutoLISP-
XLISP desarrolladas por Tony Tanzillo.

* Fuente: Dr. Edmund Weitz (edi@agharta.de) posting al newsgroup comp.lang.lisp Fecha: 2001-09-
28 03:38:20 PST

PARA MUESTRA...

Como una muestra de la capacidad de sntesis y abstraccin a la que podemos acceder con LISP (y
una buena cuota de ingenio) reproducimos este pequeo problema planteado a manera de acertijo
hace unos das por Vladimir Nesterovski en el grupo de noticias autodesk.autocad.customization, y
la solucin propuesta otro maestro, Tony Tanzillo:

Hola todos, os propongo algo:


crear una funcin que para una lista de puntos
devuelva un par de puntos con los valores mnimos
y mximos (una suerte de "caja de abarque"), que
funcione para puntos n-dimensionales y que no
emplee LAMBDA o SETQ.
Debe ser simple tambin. :)
Por ejemplo, para '( (1 2 2) (2 5 4) (3 1 2) )
devolvera '( (1 1 2) (3 5 4) ).
Pasadlo bien, :-)
--
Vlad

Y la respuesta de Tony Tanzillo:

(defun extents (plist)


(list (apply 'mapcar (cons 'min plist))
(apply 'mapcar (cons 'max plist))))

En dos lneas de cdigo resuelta una funcin que explicada en trminos de programacin ms
convencionales, recibir dos matrices de dimensiones variables n x m y devolver una matriz
conteniendo los mximos y mnimos para cada uno de los trminos de las matrices recibidas. La
funcin EXTENTS recibe como argumento una lista de listas y devuelve otra, sin recurrir en ningn
momento a la creacin de variables como almacenaje intermedio. Por otra parte el argumento original
permanece inalterado, es decir que se trata de una funcin no destructiva.

Esto a manera de muestra de lo que trataremos de exponer de aqu en adelante.

1.1. Visual LISP


0. Introduccin
1. El Entorno de Desarrollo Visual LISP
2. Tcnicas Fundamentales
3. Acceso a la Base de Datos Geomtrica.
4. Visual LISP Avanzado
5. Ejercicios

ndice del Tema


1.1. Visual LISP

1.2. El Entorno de Desarrollo

1.3. El Editor Visual LISP en Detalle

o Barras de Herramientas

o Men Contextual

o Teclas Rpidas

1.4. El Trabajo con Visual LISP y AutoCAD

o Barra de Mens

o Barras de Herramientas

o La Consola Visual LISP

LISP fu inicialmente fue desarrollado como un lenguaje interpretado, aunque las modernas
versiones cuentan siempre con un compilador que transforma el cdigo fuente en lenguaje de
mquina optimizado. Esta compilacin puede ejecutarse de manera inmediata al cargar en el entorno
de desarrollo el cdigo fuente del programa, lo que facilita el desarrollo al disponer de una evaluacin
de manera inmediata. Para acceder a este entorno, en el caso del Visual LISP, se teclea desde la
lnea de comando de AutoCAD las instrucciones VLISP VLIDE (esta ltima para compatibilidad
con el Visual LISP de la versin 14). Las instrucciones LISP se introducen para su evaluacin en una
ventana especial conocida como la Consola Visual LISP. Si no est a la vista, se puede abrir esta
ventana pulsando el botn de la barra de herramientas.

El cursor que aparece junto al smbolo _$ indica que le sistema est listo para recibir las expresiones
LISP del usuario. La imagen anterior muestra el resultado de evaluar una expresin usando
funciones aritmticas. La evaluacin se produce al pulsar <INTRO>. Una vez impreso el resultado
aparece de nuevo el smbolo _$ indicando que el sistema est listo para recibir una nueva expresin.
Este ciclo que se desarrolla en el intrprete se conoce como bucle delectura-evaluacin-
impresin (read-eval-print loop). Esto significa que el intrprete lee lo que se ha tecleado, lo evalay
entonces imprime el resultado antes de quedar listo para la nueva expresin. Al uso de la consola
dedicaremos una seccin especfica de este curso.

El entorno de desarrollo (IDE) Visual LISP cuenta adems con un Editor especializado y una serie
de medios para la depuracin de los programas muy superiores a los que estaban disponibles en el
viejo AutoLISP.

No obstante, estas lecciones podrn ser seguidas utilizando cualquier versin de AutoLISP. Se ha
tratado de sealar cuando se est hablando de funciones o modos de operacin propios del Visual
LISP que noi estn disponibles en el entorno AutoLISP.

Hay otras implementaciones de LISP para uso general disponibles muchas veces como software
gratuito a travs de internet. Para ms informacin se recomienda acceder a los siguientes sitios
WEB:

AutoCAD-AutoLISP info+tools Pgina AutoCAD/AutoLISP de Reini Urban.

The Association of LispUsers Pgina WEB de la Asociacin de Usuarios de LISP.

Common Lisp: Intro, Resources & FAQ Introduccin al Common LISP.

Un caso particular es el del Corman CommonLisp, para el que Reini Urban ha implementado la
posibilidad de su ejecucin desde el entorno AutoCAD y que pudiera sealar un camino de desarrollo
interesante para el futuro. Tambin existen utilidades para la transferencia de programas AutoLISP-
XLISP desarrolladas por Tony Tanzillo.

1.2. El Entorno de Desarrollo


0. Introduccin
1. El Entorno de Desarrollo Visual LISP
2. Tcnicas Fundamentales
3. Acceso a la Base de Datos Geomtrica.
4. Visual LISP Avanzado
5. Ejercicios

ndice del Tema


1.1. Visual LISP

1.2. El Entorno de Desarrollo

1.3. El Editor Visual LISP en Detalle

o Barras de Herramientas

o Men Contextual

o Teclas Rpidas

1.4. El Trabajo con Visual LISP y AutoCAD

o Barra de Mens

o Barras de Herramientas

o La Consola Visual LISP


Visual LISP (VLISP) representa una renovacin de LISP para AutoCAD, actualizndolo para incluir
prestaciones que ya son normales en los modernos dialectos de LISP que se ajustan a la normativa
COMMON LISP. An sin llegar a ser totalmente compatible con esta normativa, es significativo el
incremento de su potencia como lenguaje de programacin.
Es particularmente til la posibilidad que se incorpora para la interaccin con la jerarqua de objetos
de la aplicacin mediante la interfaz ActiveX Automation de Microsoft, y la posibilidad de responder
a eventos mediante la implementacin de funciones diseadas como reactores.

Como herramienta de desarrollo se aporta un Entorno de Desarrollo Integrado (IDE) que incluye un
compilador y varias utilidades para la depuracin.

El IDE Visual LISP incluye:


Comprobador de Sintaxis que reconoce secuencias AutoLISP errneas y el uso incorrecto
de los argumentos en llamadas a las funciones primitivas del lenguaje.
Compilador de Ficheros que incrementa la velocidad de ejecucin y constituye una
plataforma de distribucin que brinda seguridad al cdigo fuente.
Depurador de Fuentes, diseado especficamente para AutoLISP, que permite la ejecucin
paso a paso del cdigo fuente en una ventana mientras se observan simultneamente los
resultados obtenidos en la pantalla grfica de AutoCAD.
Editor de Programacin que emplea la codificacin por color para LISP y DCL, as como
otras caractersticas de apoyo sintctico.
Formateo LISP automtico que redistribuye las lneas de cdigo y las identa para facilitar la
lectura de los programas.
Amplias caractersticas de Inspeccin y Vigilancia (Watch) que permiten el acceso en tiempo
real a los valores de las expresiones y las variables, y que pueden ser empleadas tanto para
datos LISP como para objetos grficos de AutoCAD.
Ayuda sensible al contexto sobre las funciones AutoLISP y una ventana Apropos para
bsqueda de nombres de smbolos.
Sistema de Administracin de Proyectos que facilitan el mantenimiento de aplicaciones con
mltiples ficheros fuente.
Empaquetado de los ficheros AutoLISP compilados en un nico mdulo de programa.
Capacidad para guardar y recuperar la configuracin del Escritorio para reutilizar la
distribucin de ventanas de cualquier sesin anterior de VLISP.
Consola Visual LISP Inteligente que permite un nuevo nivel de interaccin del usuario, con
funciones que amplan las de la ventana de texto habitual de AutoCAD.

1.3. El Editor Visual LISP en Detalle


0. Introduccin
1. El Entorno de Desarrollo Visual LISP
2. Tcnicas Fundamentales
3. Acceso a la Base de Datos Geomtrica.
4. Visual LISP Avanzado
5. Ejercicios
ndice del Tema
1.1. Visual LISP

1.2. El Entorno de Desarrollo

1.3. El Editor Visual LISP en Detalle

o Barras de Herramientas

o Men Contextual

o Teclas Rpidas

1.4. El Trabajo con Visual LISP y AutoCAD


o Barra de Mens

o Barras de Herramientas

o La Consola Visual LISP


Es ms que un simple editor de texto. Ser, en realidad, nuestro lugar de trabajo habitual para la
programacin LISP dentro de AutoCAD. Cada fichero de programa abierto tendr su propia ventana
del Editor

Un programa en el editor tendr ms o menos este aspecto:

Codificacin sintctica por color


Lo que primero llama la atencin la ventana del editor es el color que adoptan los diferentes
componentes del programa. El editor identifica las distintas partes de un programa LISP y le asigna
distintos colores. Esto permite detectar a primera vista elementos tales como nombres de funcin,
nmeros enteros o reales y cadenas, distinguindolos de los nombres de funciones y variables
asignados por el usuario. Los errores mecanogrficos saltan as a la vista de manera inmediata.
Estos colores pueden personalizarse a gusto del usuario.

Controles de la Ventana del Editor


La ventana del Editor no posee Barras de Mens ni de Herramientas. Al estar el foco situado en una
ventana del Editor se activarn las opciones de Men y las Herramientas de la ventana de la
Aplicacin que pueden usarse para operaciones del Editor. Muchas de las opciones pueden tambin
ser ejecutadas desde el men contextual que se abre al pusar el botn derecho del ratn. Existe la
posibilidad de utilizar tambin las combinaciones de teclas rpidas usuales en los editores de texto
y adems algunas combinaciones que se utilizan para funciones exclusivas de este editor. En
trminos generales, adems de la codificacin por color el editor ofrece otras ayudas que facilitan
grandemente el desarrollo de programas. Algunas de estas utildades son:

Comprobacin del cierre de parntesis


Formateo del Texto
Comentarios automticos en los cierres de Expresiones

Comentado y Descomentado automtico de las lneas seleccionadas
Bsqueda y Sustitucin de Texto
Comprobacin de la Sintaxis
Carga de expresiones LISP para ser probadas.

En los prximos apartados pasaremos a exponer estas funcionalidades:

Barras de Herramientas
Men Contextual
Teclas Rpidas

Copias de Seguridad
El Editor VLISP viene configurado para hacer
siempre copias de seguridad de los ficheros. Estas
copias de seguridad se sitan en el mismo directorio
de la fuente del programa usando el mismo nombre
y la extensin _ls. De esta manera la copia de
seguridad del fichero caras.lsp se
llamar caras._ls. Para recuperar la ltima
versin guardada de un fichero se emplea la opcin

1.4. El Trabajo con Visual LISP y AutoCAD


0. Introduccin
1. El Entorno de Desarrollo Visual LISP
2. Tcnicas Fundamentales
3. Acceso a la Base de Datos Geomtrica.
4. Visual LISP Avanzado
5. Ejercicios
ndice del Tema
1.1. Visual LISP

1.2. El Entorno de Desarrollo

1.3. El Editor Visual LISP en Detalle

o Barras de Herramientas

o Men Contextual

o Teclas Rpidas

1.4. El Trabajo con Visual LISP y AutoCAD

o Barra de Mens

o Barras de Herramientas

o La Consola Visual LISP


VLISP posee su propia ventana de aplicacin distinta de la de AutoCAD, pero no puede ejecutarse
de manera independiente. Para acceder al IDE Visiual LISP, antes deber haberse iniciado una
sesin de AutoCAD.
Iniciar Visual LISP
Como se dijo antes, Debe haberse iniciado una sesin de AutoCAD. Esta sesin puede contener
slo un dibujo vaco, o pueden estar abiertos dibujos cuyo contenido se desee procesar.

Para activar el IDE VLISP tenemos tres opciones:

Seleccionar del men Herramientas>AutoLISP>Editor Visual LISP


Teclear en la lnea de comandos: VLISP
Nota: Hemos encontrado al menos en una versin localizada
espaola que el comando VLIDE no es reconocido por el sistema.
La Ayuda de esa misma versin aeala como alternativa el
comando VISUALLISPIDE, que tampoco es reconocido. En estos
casos siempre se puede recurrir al comando VLIDE, descrito en el
punto siguiente.
La versin anterior de Visual LISP utilizaba con los mismos fines el
comando VLIDE, que sigue siendo reconocido por la versin 2000.
De hecho, internamente la llamada de AutoCAD al IDE Visual LISP
se realiza mediante este comando, que veremos aparecer en la
lnea de comandos cada vez que se cambie a ese entorno.

La Ventana de la Aplicacin

Al iniciarse Visual LISP pasa a primer plano la siguiente ventana de aplicacin:

Puede seleccionar cada parte de la ventana para una breve descripcin.