<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0012-7353</journal-id>
<journal-title><![CDATA[DYNA]]></journal-title>
<abbrev-journal-title><![CDATA[Dyna rev.fac.nac.minas]]></abbrev-journal-title>
<issn>0012-7353</issn>
<publisher>
<publisher-name><![CDATA[Universidad Nacional de Colombia]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0012-73532005000400008</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[NEUROSCHEME: UN LENGUAJE PARA EL MODELAMIENTO DE REDES NEURONALES ARTIFICIALES]]></article-title>
<article-title xml:lang="en"><![CDATA[NEUROSCHEME: A MODELING LANGUAGE FOR ARTIFICIAL NEURAL NETWORKS]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[VELÁSQUEZ HENAO]]></surname>
<given-names><![CDATA[JUAN DAVID]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas Grupo de Inteligencia Artificial]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>11</month>
<year>2005</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>11</month>
<year>2005</year>
</pub-date>
<volume>72</volume>
<numero>147</numero>
<fpage>75</fpage>
<lpage>83</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0012-73532005000400008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0012-73532005000400008&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0012-73532005000400008&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[La construcción de modelos basados en Redes Neuronales Artificiales, no solamente comprende la parte de creación de la red neuronal como tal y su entrenamiento, si no también, una cantidad de labores que se realizan antes y después de esta fase. En el mercado existen muchas herramientas para el modelamiento de Redes Neuronales Artificiales, sin embargo, ellas no brindan la versatilidad necesaria para cumplir con estas tareas adicionales. Para satisfacer esta necesidad, se implementó el Lenguaje Algorítmico NeuroScheme, el cual incorpora los modelos de Redes Neuronales Artificiales como un tipo de dato nativo dentro del lenguaje, y que es caracterizado por su capacidad expresiva, elegancia y simplicidad.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[Building of neural network-based models, is conformed not only by the creation of the artificial neural network and its training, but other number of activities realized before and after of this phase too. In the market exists many computational tools for artificial time series modelling, however, they are not enough versatile for doing these additional task. For satisfying this necessity, the Neuroscheme algorithmic language is developed, which incorporate the artificial neural networks models as a native type of data inside the language; it is characterized by its expression capacity, elegance and simplicity.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[redes neuronales artificiales]]></kwd>
<kwd lng="es"><![CDATA[lenguajes de programación]]></kwd>
<kwd lng="es"><![CDATA[lenguajes declarativos]]></kwd>
<kwd lng="en"><![CDATA[artificial neural networks]]></kwd>
<kwd lng="en"><![CDATA[programming languages]]></kwd>
<kwd lng="en"><![CDATA[declarative languages]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align=center><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><b>NEUROSCHEME: UN   LENGUAJE PARA EL MODELAMIENTO DE REDES NEURONALES ARTIFICIALES </b></font></p>     <p align=center><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>NEUROSCHEME: A   MODELING LANGUAGE FOR ARTIFICIAL NEURAL NETWORKS</b></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>JUAN   DAVID VEL&Aacute;SQUEZ HENAO</b>    <br>   <i>Grupo de Inteligencia Artificial, Facultad de Minas,   Universidad Nacional de Colombia    <br>   <a href="mailto:jdvelasq@unalmed.edu.co">jdvelasq@unalmed.edu.co</a></i></font></p>     <p align=center><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Recibido   para revisi&oacute;n 5 de Agosto   de 2004, aceptado 28 de Marzo de 2005, versi&oacute;n final 10 de Junio de 2005</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN</b>:   La construcci&oacute;n de modelos basados en Redes   Neuronales Artificiales, no solamente comprende la parte de creaci&oacute;n de la   red neuronal como tal y su entrenamiento, si no tambi&eacute;n, una cantidad de labores   que se realizan antes y despu&eacute;s de esta fase. En el mercado existen muchas   herramientas para el modelamiento de Redes Neuronales Artificiales, sin embargo,   ellas no brindan la versatilidad necesaria para cumplir con estas tareas adicionales.   Para satisfacer esta necesidad, se implement&oacute; el Lenguaje Algor&iacute;tmico NeuroScheme,   el cual incorpora los modelos de Redes Neuronales Artificiales como un tipo   de dato nativo dentro del lenguaje, y que es caracterizado por su capacidad   expresiva, elegancia y simplicidad.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>PALABRAS CLAVE</b>:   redes neuronales artificiales, lenguajes de programaci&oacute;n,   lenguajes declarativos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ABSTRACT</b>: Building of neural network-based models, is conformed not   only by the creation of the artificial neural network and its training, but   other number of activities realized before and after of this phase too. In   the market exists many computational tools for artificial time series modelling,   however, they are not enough versatile for doing these additional task. For   satisfying this necessity, the Neuroscheme algorithmic language is developed,   which incorporate the artificial neural networks models as a native type of   data inside the language; it is characterized by its expression capacity, elegance   and simplicity. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>KEYWORDS</b>:  artificial   neural networks, programming languages, declarative languages.</font></p>     ]]></body>
<body><![CDATA[<p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>1. INTRODUCCI&Oacute;N</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La construcci&oacute;n de sistemas de soluci&oacute;n de problemas basados en Redes Neuronales   Artificiales (RNA), comprende un grupo de tareas que van m&aacute;s all&aacute; de la especificaci&oacute;n   del modelo y su posterior entrenamiento, las cuales comprenden, el an&aacute;lisis   de la informaci&oacute;n de entrada, la selecci&oacute;n de los patrones para entrenamiento,   preparaci&oacute;n de la informaci&oacute;n para entrenar   <st1:PersonName ProductID="la RNA" w:st="on">   la RNA, la identificaci&oacute;n del modelo, su entrenamiento, la validaci&oacute;n de los   resultados, y su aplicaci&oacute;n propiamente dicha en la soluci&oacute;n del problema particular   en cuesti&oacute;n.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estas tareas pueden   llegar a involucrar procesos complejos de c&aacute;lculo tales   como pruebas estad&iacute;sticas, procesos de descomposici&oacute;n de los datos de entrada,   t&eacute;cnicas de preprocesamiento de la informaci&oacute;n de entrada, normalizaci&oacute;n de   datos o estimaci&oacute;n de intervalos de confianza. Desafortunadamente, no hay un   derrotero a seguir en la forma que deben realizarse todos estos pasos, ya que   ellos dependen en gran medida del problema particular que se esta resolviendo.   Esta situaci&oacute;n se agrava cuando una sola RNA no es suficiente para resolver   el problema con la precisi&oacute;n adecuada, y es necesario combinarla con otras   RNA, para formar un sistema de varias RNA, o con otras t&eacute;cnicas tales como   modelos econ&oacute;metricos o estad&iacute;sticos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> En la actualidad existen muchas herramientas comerciales para la construcci&oacute;n   de modelos de RNA, de las cuales, la gran mayor&iacute;a esta orientada a un usuario   final que no domina la programaci&oacute;n de computadores. Por este motivo, dichas   herramientas se concentran en la parte de entrenamiento del modelo de RNA,   construyendo un ambiente gr&aacute;fico alrededor de este objetivo, que le permite   al usuario la creaci&oacute;n de modelos y su posterior entrenamiento. Para las dem&aacute;s   tareas mencionadas, se dan, en algunas ocasiones, unas pocas opciones al usuario. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Visto de una manera   integral, esta forma de ejecutar el proceso no es deseable, ya que se desperdician   esfuerzos en el aprendizaje de las distintas herramientas y en el intercambio   de informaci&oacute;n que en la mayor&iacute;a de los casos es manual. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Si se analiza   desde la necesidad de integrar diferentes paradigmas, este proceso es pr&aacute;cticamente inviable, ya que no se da ning&uacute;n tipo de prestaci&oacute;n para la   construcci&oacute;n de este tipo de sistemas.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Puede concluirse   entonces, que es necesaria una herramienta que permita realizar todos los   pasos descritos para la preparaci&oacute;n de modelos de RNA, as&iacute; como la   integraci&oacute;n de estos con otros paradigmas, de tal forma que dicha integraci&oacute;n   sea natural, r&aacute;pida y sencilla, manteniendo unos est&aacute;ndares de calidad, rapidez   y eficiencia.</font></p> <font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>2. DESCRIPCI&Oacute;N DE LA HERRAMIENTA </b></font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para   el desarrollo de la herramienta se ha seleccionado como lenguaje base al   dialecto Scheme (Sussman et al, 1975; Steele et al, 1978; Dybig, 1987) que   proviene de  Lisp (McCarthy, 1960), el cual se encuentra fundamentado en el   c&aacute;lculo lambda (Church, 1941; Curry and Feys, 1958); este lenguaje es caracterizado   por su elegancia conceptual y simplicidad, por lo que es ampliamente usado   en la enseñanza de principios de programaci&oacute;n y la investigaci&oacute;n en lenguajes   de programaci&oacute;n. A diferencia de otros dialectos de Lisp, Scheme define el &aacute;mbito   de sus definiciones l&eacute;xicamente, es estructurado en bloques, soportando funciones   y continuaciones como objetos de datos de primera clase, lo que quiere decir,   que ellos pueden ser pasados como par&aacute;metros a funciones, retornados como el   valor de una funci&oacute;n, y permanecer indefinidamente en memoria.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los programas   escritos en Scheme est&aacute;n basados en funciones y recursividad,   m&aacute;s que en comandos y ciclos, usando con poca frecuencia asignaci&oacute;n de variables. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En general, y   no solamente sobre el t&oacute;pico de la herramienta que se est&aacute; bosquejando,   la programaci&oacute;n funcional presenta varias ventajas sobre la programaci&oacute;n imperativa,   que es bien ejemplificada por lenguajes de programaci&oacute;n como C o Pascal:</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Primero, la programaci&oacute;n funcional es mucho m&aacute;s   simple, ya que las expresiones son construidas en forma natural inherentemente   recursiva, mientras que los programas imperativos son construidos con base   en declaraciones o comandos complejos que se combinan con expresiones.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Segundo, la programaci&oacute;n funcional es mucho m&aacute;s f&aacute;cil de entender, ya que   cada pieza de c&oacute;digo ejecuta una tarea espec&iacute;fica, facilitando el seguimiento   del c&oacute;digo.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tercero, es posible   ejecutar pruebas para validar el programa de una manera mucho m&aacute;s simple en un lenguaje declarativo que en uno imperativo, debido a   la misma regularidad del c&oacute;digo.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Cuarto, las variables   locales se declaran directamente como par&aacute;metros de   las funciones, inicializ&aacute;ndose siempre al ser invocada una funci&oacute;n, y representa   m&aacute;s el nombre para un valor que una localizaci&oacute;n en memoria, tal como ocurre   en C o Pascal.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Quinto, es posible   alternar el orden de evaluaci&oacute;n de las expresiones   en los lenguajes funcionales, un aspecto que es imposible modificar en un   lenguaje imperativo,</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Y sexto, es posible   modificar el orden de ejecuci&oacute;n de las funciones, de tal   forma que pueden construirse complejas instrucciones con retornos no locales,   lo que facilita complejas estructuras de control, capacidad que no est&aacute; presente   en ning&uacute;n lenguaje imperativo.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una prueba de   la simplicidad de la herramienta, se puede evidenciar en la especificaci&oacute;n de la misma, la cual consta de unas cincuenta p&aacute;ginas aproximadamente.   Sin embargo, y a trav&eacute;s del uso de caracter&iacute;sticas tales como la manipulaci&oacute;n   de la ejecuci&oacute;n, es posible crear estructuras complejas de control, tales como   los bloques try...catch de C++. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Scheme es un lenguaje   declarativo d&eacute;bilmente tipado, es decir, el tipo de   la variable se determina durante la fase de ejecuci&oacute;n y no de compilaci&oacute;n como   ocurre en C o Pascal. Scheme permite usar funciones como argumentos en la llamada   a otros funciones, e inclusive permite devolver funciones como resultado de   la aplicaci&oacute;n de funciones. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estas caracter&iacute;sticas le dan una capacidad de expresi&oacute;n a&uacute;n m&aacute;s potente que   la del lenguaje C, pero dejando a un lado temas como el manejo de punteros,   que hacen de C un lenguaje dif&iacute;cil de aprender. Es por esta raz&oacute;n que los programas   escritos en Scheme son m&aacute;s cortos que sus equivalentes en C o Pascal. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">As&iacute; mismo, y debido a su simplicidad y elegancia conceptual, el lenguaje promueve   la construcci&oacute;n de abstracciones complejas a trav&eacute;s del uso de barreras de   abstracci&oacute;n, facilitando la construcci&oacute;n de sistemas complejos.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por otro lado,   la comunidad cient&iacute;fica ha utilizado ampliamente Lisp y sus   dialectos en aplicaciones de Inteligencia Artificial, y es normal encontrar   dentro de sus ejemplos t&iacute;picos de programaci&oacute;n, la implementaci&oacute;n de algoritmos   de b&uacute;squeda, sistemas de razonamiento similares a Prolog, o Sistemas de Producci&oacute;n.   Y aunque se argumenta que Scheme es un lenguaje orientado a la enseñanza de   principios de programaci&oacute;n, y que para aplicaciones reales deber&iacute;a utilizarse   Common Lisp, Scheme contiene todas las caracter&iacute;sticas deseables para realizar   la construcci&oacute;n de sistemas para soluci&oacute;n de problemas. Esto se ejemplifica   en el proyecto Guile de   <st1:PersonName ProductID="la GNU" w:st="on">   la GNU &#91;v&eacute;ase por ejemplo  los siguientes sitios WEB <a href="http://www.schemers.org" target="ventana">www.schemers.org</a>, <a href="http://www.swiss.ai.mit.edu/projects/scheme/" target="ventana">www.swiss.ai.mit.edu/projects/scheme/</a> &#93;, el cual es una librer&iacute;a escrita en Lenguaje C que implementa Scheme que   se usa embebido dentro de la aplicaci&oacute;n principal.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Estos hechos son   la base para afirmar que la herramienta que se plantea para la integraci&oacute;n   de paradigmas es precisamente Scheme.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>3. ARQUITECTURA DE   <st1:PersonName ProductID="LA HERRA-MIENTA IMPLEMENTADA" w:st="on">   LA HERRAMIENTA IMPLEMENTADA</b></font></p> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.1 N&Uacute;CLEO DE <st1:PersonName ProductID="LA HERRAMIENTA" w:st="on"> LA HERRAMIENTA</b></font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El n&uacute;cleo de la herramienta es un interprete de Scheme basado en un mont&iacute;culo   de memoria, similar a las primeras implementaciones de la herramienta, descrita   por Sussman (1975) y que ha sido usada por otros autores (Dybig, 1983).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La herramienta   se divide en cuatro grandes partes: un m&oacute;dulo de interfaz con   el usuario, encargado de administrar las entradas del usuario, los mensajes   del sistema, y utilitarios como la historia de comandos; un preprocesador de   c&oacute;digo fuente, capaz de manipular el c&oacute;digo ingresado por el usuario para expandir   las macros de forma higi&eacute;nica, que es un mecanismo mucho m&aacute;s potente que los   preprocesadores normalmente encontrados en lenguajes de alto nivel; un compilador   que convierte el c&oacute;digo fuente expandido a bytecodes o instrucciones de la   m&aacute;quina virtual del interprete; este compilador esta formado por un analizador   l&eacute;xico y un analizador sint&aacute;ctico que interact&uacute;an con el administrador del   mont&iacute;culo de memoria, para generar el bytecode; y finalmente, una m&aacute;quina   virtual que ejecuta las instrucciones de bajo nivel representadas por los   bytecodes, tal como puede observarse en   <st1:PersonName ProductID="la Figura" w:st="on">   la <a href="#fig01">Figura 1</a>.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig01"></a><img src="/img/revistas/dyna/v72n147/a08fig01.gif">    <br>   Figura   1.</b> Esquema del Int&eacute;rprete    <br>   <b>Figure 1. </b>Interpreter scheme</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La herramienta   est&aacute; completamente escrita en Lenguaje C (Kernigan &amp; Richie,   1978), y hace uso intensivo de manejo de punteros, estructuras de datos, y   administraci&oacute;n de memoria din&aacute;mica. Las funciones primitivas proporcionadas   por el int&eacute;rprete, son tambi&eacute;n codificadas en Lenguaje C, permitiendo optimizar   funciones cr&iacute;ticas tales como algoritmos para el entrenamiento de RNAs.</font></p> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.2 FUNCIONES INCORPORADAS</b></font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El   interprete soporta todas las funciones descritas en el Reporte del Lenguaje   Algor&iacute;tmico Scheme, as&iacute; como otras funciones definidas en Common Lisp y Emacs   Lisp, y otras extra&iacute;das de las bibliotecas de funciones del Lenguaje C. Dichas   funciones son soportadas dentro del interprete a trav&eacute;s de su codificaci&oacute;n   directa en Lenguaje C, o como macros que se expanden en secuencias de funciones   codificadas como primitivas en C. As&iacute; mismo, se han implementado otras primitivas   presentes en MIT Scheme y Dr Scheme, que no aparecen en los reportes, pero   que son consideradas como necesarias para que la herramienta funcione de una   manera adecuada.</font></p> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.3 INTERFAZ CON EL SISTEMA</b></font>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El int&eacute;rprete implementado puede cargar, compilar y ejecutar programas en   c&oacute;digo fuente almacenados en el disco duro del computador, posibilitando que   otras aplicaciones puedan ejecutar programas dentro del interprete. Igualmente   puede dejar registro escrito de la interacci&oacute;n con el usuario.</font></p> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.4 INTERFAZ CON EL USUARIO</b></font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El usuario interact&uacute;a con el sistema a trav&eacute;s de una ventana de comandos donde   digita las ordenes que el sistema debe ejecutar, o a trav&eacute;s de la interfaz   gr&aacute;fica que presenta cajas de di&aacute;logo, que pueden ser accesadas a trav&eacute;s de   la barra de men&uacute;s, y en las cuales el usuario proporciona la informaci&oacute;n necesaria   para ejecutar los distintos comandos, tal como aparece en   <st1:PersonName ProductID="la Figura" w:st="on">   la <a href="#fig02">Figura 2</a>. </font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig02"></a><img src="/img/revistas/dyna/v72n147/a08fig02.gif">    <br>   Figura   2</b>. Interfaz de NeuroScheme    <br>   <b>Figure 2.</b> NeuroScheme user interface</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">De igual forma,   puede interactuar con el interprete a trav&eacute;s de interfases   de usuario mucho m&aacute;s elaboradas, tales como editores de texto o simuladores   gr&aacute;ficos; sin embargo, cualquier sistema anexo, tales como los descritos, no   manipular&aacute; ninguno de los componentes claves del interprete, debiendo interactuar   con el a trav&eacute;s del env&iacute;o de comandos, usando cadenas de texto con comandos   Scheme, las cuales ser&aacute;n interpretadas usando un minicompilador que posee el   interprete dentro de su m&aacute;quina virtual. De esta forma se garantiza un adecuado   intercambio de informaci&oacute;n entre las distintas partes del sistema.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Como una prestaci&oacute;n adicional, se han agregado di&aacute;logos como una alternativa   para invocar funciones, en los cuales el usuario llena los par&aacute;metros requeridos,   y tiene la opci&oacute;n de ejecutar directamente la funci&oacute;n, o pegarla en la l&iacute;nea   de &oacute;rdenes como parte de un comando m&aacute;s complejo.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>3.5 MODELOS   DE REDES NEURONALES ARTIFICIALES</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los modelos   de RNAs son manejados por el interprete como tipos primitivos de datos, de   igual forma a como se manejan enteros, s&iacute;mbolos   o cadenas de caracteres; y no como abstracciones codificadas directamente   en Scheme. Esto hace de los modelos de RNA objetos de primer nivel que pueden   ser almacenados en variables, pasados dentro de los argumentos de las funciones,   e inclusive ser devueltos como resultado de ellas.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Las funciones   para la creaci&oacute;n y manipulaci&oacute;n de los modelos de RNAs, son   tambi&eacute;n codificados como primitivas, directamente en Lenguaje C, lo que permite   tener c&oacute;digo ejecutable altamente optimizado, debido a la criticidad que la   velocidad de ejecuci&oacute;n de estas funciones tiene dentro del desempeño de la   aplicaci&oacute;n.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La mezcla de c&oacute;digo interpretado con c&oacute;digo ejecutable, tiene un efecto muy   importante en el desempeño de la herramienta, ya que todos los procesos cr&iacute;ticos   se ejecutan directamente en binario, mientras que el cascaron que esta encima   de ellos, el cual permite codificar algoritmos complejos, y dar la funcionalidad   requerida, se ejecuta m&aacute;s lentamente al ser interpretado, pero esto requiere   un porcentaje muy pequeño del tiempo total de la aplicaci&oacute;n.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El modelo interno   para las RNAs permite construir cualquier tipo de arquitectura, y adicionalmente,   el usuario puede crear nuevas arquitecturas eliminando conexiones o adicionando   capas. En la actualidad, ya que el uso primordial dado hasta ahora para el   entorno, ha sido la construcci&oacute;n de modelos de series de tiempo   basados en RNAs, se han implementado tres modelos de propagaci&oacute;n hacia delante:   feedforward, cascada-correlaci&oacute;n y cascada hacia delante; los algoritmos de   entrenamiento implementados incluyen: montecarlo, regla delta generalizada,   regla delta con momento, gradiente descendente, estrategias de evoluci&oacute;n, temple   simulado, as&iacute;   como versiones de algunas de ellas combinadas con m&iacute;nimos cuadrados.</font></p>     <p align="left"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>4. FUNCIONES SOPORTADAS</b> </font></p> <font size="2" face="Verdana, Arial, Helvetica, sans-serif">     <p>NeuroScheme soporta   las siguientes funciones, las cuales aparecen referenciadas dentro de la especificaci&oacute;n   del Lenguaje. </p> </font> <ul>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Condicionales     y l&oacute;gicas:     If, cond, case, and, or, when, unless.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Enlazado de variables:     Let, let*, letrec.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Secuenciamiento: begin</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Iteraci&oacute;n:     do, let, repeat, while, until, dotimes, dolist, loop</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Quasiquotation: quasiquote</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Asignaci&oacute;n:     set!, incr, decr, pset!, rotate!</font></li>       ]]></body>
<body><![CDATA[<li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Equivalencia: eqv?, eq?,     equal?</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> N&uacute;meros: number?, real?,     Rational? Integer?, exact?, inexact?, &gt;, &gt;=, &lt;, &lt;=, =, &lt;&gt;,     even?, odd?, negative?, positive?, zero?, max, min, +, -, *, /, abs, quotient,     remainder, modulo, gcd, lcm, numerator, denominator, floor, ceiling, truncate,     round, exp, log, sin, cos, tan, cot, sec, csc, asin, acos, atan, acot, asec,     acsc, sqrt, expt, exact-&gt;inexact, inexact-&gt;exact</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> N&uacute;meros aleatorios:     get-seed, rand-max, rand-uniform, rand-normal, inversa-normal</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Entrada y salida     num&eacute;rica:     number-&gt;string, string-&gt;number</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Bol&eacute;anos: not,     bolean?</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Pares y listas:     pair?, cons, car, cdr, set-car!, set-cdr!, caar, cadr, … cddddr, first,     second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, null?,     list?, list, append, reverse, list-tail, list-ref, last-pair, list-copy,     push, pop, push-new, memq, memv, member, assq, assv, assoc</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> S&iacute;mbolos: symbol?, string-&gt;symbol,     symbol-&gt;string.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Caracteres:     char?, char=?, char &gt;?, char=&gt;?, char&lt;?, char&lt;=?, Char-ci=?, char-ci&gt;?, char-ci&gt;=?,     char-ci&lt;?, char-ci=&lt;?, char-alphabetic?, char-numeric?, char-whitespace?,     char-upper-case?, char-lower-case?, char-&gt;integer char, integer-&gt;char,     char-upcase, char-downcase</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Cadenas de     Caracteres: string?, make-string, string-char, string-length, string-append,     string-ref, string-set!, string=?, string-ci=?, string&lt;?, string&gt;?, string&lt;=?, string&gt;=?,     string-ci&lt;?, string-ci&gt;?, string-ci&lt;=?, string-ci&gt;=?, substring,     string-&gt;list, list-&gt;string, string-copy, string-fill!, string-downcase,     string-upcase, string-downcase!, string-upcase!, substring-downcase!, substring-upcase!,     reverse-string, reverse-string!, reverse-substring, reverse-substring!, string-head,     string-tail, string-capitalize, string-capitalize!, substring-capitalize,     substring-capitalize!, string-capitalized?, substring-capitalized,? string-upper-case?,     substring-upper-case?, string-lower-case?, substring-lower-case?, string-replace,     string-replace!</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Vectores: vector?,     make-vector, vector, vector-length, vector-ref, vector-set!, vector-&gt;list, list-&gt;vector,     vector-fill!, vector-first, vector-second, vector-third, vector-fourth, vector-fifth,     vector-sixth, vector-seventh, vector-eighth, vector-ninth, vector-tenth,     subvector, vector-head, vector-tail</font></li>       ]]></body>
<body><![CDATA[<li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Control: procedure?,     map, for-each, call/cc</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Evaluaci&oacute;n:     eval</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Puertos: input-port?,     output-port?, open-input-filename, open-output-filename, open-append-filename,     close-input-port, close-output-port.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Entrada: read, read-char,     eof-object?, char-ready?.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Salida: write, display,     newline, write-char.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Interface: load, transcript-on,     transcript-off, ed.</font></li>       <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Redes Neuronales Artificiales:     nn-create-ffn, nn-create-ccn, nn-create-cfn, nn-propagate-signal, nn-display-input-weights,     nn-display-neurons-by-layer, nn-display-bias-weights, nn-display-layer-weights,     nn-display-output-neurons, nn-generate-random-weights, nn-calculate-error,     nn-train-montecarlo, nn-train-backpropagation, nn-train-backpropagation-mom,     nn-train-graddesc, nn-train-simanneal, nn-train-sa, nn-train-es, nn-calculate-mc,     nn-get-input-weight, nn-get-bias-weight, nn-get-layer-weight, nn-set-input-weight!,     nn-set-bias-weight!, nn-set-layer-weight!, nn-load-network, nn-save-network</font></li>     </ul>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>5. RESULTADOS OBTENIDOS</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la actualidad,   el primer prototipo es operable e incorpora el paradigma de las redes neuronales   artificiales. Como ya se indic&oacute;, la red neuronal se   modela como un tipo de dato propio del lenguaje, lo que implica que se encuentra   codificada en Lenguaje C, haciendo que la velocidad de los algoritmos de entrenamiento   sea tan alta como en las aplicaciones de usuario final disponibles hoy en d&iacute;a. </font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Como un ejemplo de la funcionalidad del entorno, se presenta en   <st1:PersonName ProductID="la Figura" w:st="on">   la <a href="#fig03">Figura 3</a>, un programa en NeuroScheme cuyo objetivo es entrenar una RNA   para que aprenda la funci&oacute;n gaussiana, a partir de  valores (x, y) sim&eacute;tricos alrededor   de cero. En el se ilustra un algoritmo complejo en el cual se ejecuta un proceso   c&iacute;clico de generaci&oacute;n de un nuevo punto de arranque y posterior entrenamiento   de   <st1:PersonName ProductID="la RNA" w:st="on">   la RNA usando   <st1:PersonName ProductID="la Regla Delta" w:st="on">   la Regla Delta Generalizada, as&iacute; como la selecci&oacute;n del mejor modelo encontrado.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig03"></a><img src="/img/revistas/dyna/v72n147/a08fig03.gif">    <br>   Figura   3.</b> Programa en NeuroScheme que crea una red feedforward y la entrena   para que aprenda la campana de Gauss    <br>   <b>Figure 3.</b> Neuroscheme program for creating a feerforward network, and   training it for learning the Gauss bell. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La utilizaci&oacute;n de di&aacute;logos como mecanismo primario de comunicaci&oacute;n con el   usuario de la aplicaci&oacute;n, permite que este con unas pocas horas de entrenamiento,   y a&uacute;n sin tener un conocimiento previo del lenguaje Scheme, pueda estar entrenando   modelos de redes neuronales artificiales. Los di&aacute;logos, en nuestra aplicaci&oacute;n,   son una forma alterna de proporcionar comandos al interprete, ya que cuando   el usuario indica su aceptaci&oacute;n con respecto al contenido de la caja de di&aacute;logo,   esta no interact&uacute;a directamente con el n&uacute;cleo de la herramienta, si no que   convierte la entrada del usuario en un comando de Scheme equivalente el cual   es enviado al interprete para que sea procesado, haciendo eco en la pantalla,   de tal forma que el comando es visualizado para ser ejecutado posteriormente.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La existencia   de una l&iacute;nea de comandos, donde el usuario de la herramienta   puede digitar directamente las instrucciones de forma interactiva, permite   no solamente la creaci&oacute;n o el entrenamiento de la red neuronal, sino tambi&eacute;n   el uso de comandos m&aacute;s complejos como instrucciones para ejecutar instrucciones   c&iacute;clicamente, automatizando diferentes procesos. En consecuencia, es posible  por   ejemplo, crear algoritmos complejos de entrenamiento donde, de acuerdo con   los resultados obtenidos, se pueden alternar entre distintas t&eacute;cnicas de aprendizaje.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Adicionalmente,   al contar con dicha l&iacute;nea de comandos, es posible construir   modelos complejos de redes neuronales, donde las entradas de una red neuronal   pueden estar formadas por las salidas de otros modelos, tales como otras redes   neuronales, modelos de programaci&oacute;n lineal,  o modelos econom&eacute;tricos. Dentro   de las primitivas implementadas en nuestra herramienta, se encuentra la funci&oacute;n   load, que recibe como par&aacute;metro el nombre de un archivo en disco, el cual contiene   en formato de texto un grupo de comandos que se ejecutar&aacute;n con dicha funci&oacute;n. </font></p> <font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>6. CONCLUSIONES Y TRABAJO FUTURO</b></font>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Las   distintas fases que deben realizarse para la correcta construcci&oacute;n de   modelos basados en RNAs, hace que se requiera seguir un proceso laborioso para   llegar a un resultado adecuado. Es por ello, que en el desarrollo de estos   modelos, es necesario contar con ambientes que vayan mucho m&aacute;s all&aacute; de las   prestaciones normalmente encontradas para su entrenamiento.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por esto, es necesario   entonces, contar con una herramienta mucho m&aacute;s vers&aacute;til   que permita realizar este proceso. Se escogi&oacute; como base del desarrollo, el   dialecto Scheme, debido a sus caracter&iacute;sticas de elegancia, simplicidad conceptual,   facilidad de uso y capacidad de abstracci&oacute;n, incorporando los modelos de RNAs   como tipos de datos propios del lenguaje.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El interprete   implementado es altamente vers&aacute;til, permitiendo construir algoritmos   para la manipulaci&oacute;n y entrenamiento de RNAs, de tal forma, que es posible   automatizar procesos, y construir modelos complejos de RNAs. Estas facilidades   no est&aacute;n presentes en las herramientas comerciales para el desarrollo de modelos   de RNAs.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La incorporaci&oacute;n de cajas de di&aacute;logo a la interfaz, las cuales env&iacute;an comandos   directamente al int&eacute;rprete, ha permitido que el usuario final pueda utilizar   la herramienta con pocas horas de entrenamiento, a&uacute;n sin necesidad de aprender   el lenguaje de programaci&oacute;n.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los resultados   obtenidos hasta ahora, permiten concluir que debe continuarse con el desarrollo   de la herramienta, e incorporarse otros paradigmas como Redes Neurodifusas,   y Sistemas Borrosos, para habilitar la herramienta para construir sistemas   h&iacute;bridos para soluci&oacute;n de problemas.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>7.  REFERENCIAS</b></font></p>     <!-- ref --><p>   <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>&#91;1&#93;</b> ABELSON H and SUSSMAN G. 1984. Structure and interpretatión of Computer Programs. MIT Press.     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000096&pid=S0012-7353200500040000800001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>&#91;2&#93;</b>   AHO A.V. and ULLMAN J.D. 1979. Principles of Compiler Design. Addison-Wesley Publishing Company.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000097&pid=S0012-7353200500040000800002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;3&#93;</b>   BACKER H.G. and HEWITT C. 1977. The Incremental Garbage Collection of Processes. Procedings of the Symposium on Artificial Intelligence. Published as SIGPLAN Notices 12, 8 (August 1977), pp 55-59       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000098&pid=S0012-7353200500040000800003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;4&#93;</b>   BARTLEY D.H. and JENSEN J.C. 1986. The implementation of PC Scheme. Proceedings of the 1986 ACM Conference on Lisp and Functional Programming. Pp 86-93.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000099&pid=S0012-7353200500040000800004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;5&#93;</b>   CHURCH A. 1941. The Calculi of Lambda Convension. Annals of Mathematics Studies 6, Princenton University Press.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000100&pid=S0012-7353200500040000800005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;6&#93;</b>   CURRY H.B. and FEYS T. 1958. Combinatory Logic. North-Holland Publishing Company. Amsterdam.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000101&pid=S0012-7353200500040000800006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;7&#93;</b>   DYBVIG R. K.1987a. The Scheme Programming Language. Prentice Hall       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000102&pid=S0012-7353200500040000800007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;8&#93;</b>   DYBVIG R. K.1987b. Three Implementation Models for Scheme. PhD Disertation.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000103&pid=S0012-7353200500040000800008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;9&#93;</b>   KERNIGHAN B.W. and RITCHIE D.M. 1978. The C Programming Language. Prentice-Hall, 1978.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000104&pid=S0012-7353200500040000800009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;10&#93;</b>   MCCARTHY J. 1960. Recursive Functions of Symbolic Expressions and Their Computation by Machine. CACM 3 (april 1960). Pp 184-195.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000105&pid=S0012-7353200500040000800010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;11&#93;</b>   PETZOLD C. 1996. Programming Windows 95. Microsoft Press. McGraw Hill       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000106&pid=S0012-7353200500040000800011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;12&#93;</b>   STEELE G.L and SUSSMAN G.J. 1978. The Revised Report on Scheme. Massachusetts Institute of Technology Artificial Intelligencel. Memo 452.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000107&pid=S0012-7353200500040000800012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;13&#93;</b>   SUSSMAN GJ and STEELE GL. 1975. Scheme: an Interpreter for Extended Lambda Calculus. Massachusetts Institute of Technology Artificial Intelligence Memo 349.       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000108&pid=S0012-7353200500040000800013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br> <b>&#91;14&#93;</b>   STEELE G.L. Common Lisp The Language. Second Edition.</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000109&pid=S0012-7353200500040000800014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ABELSON]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
<name>
<surname><![CDATA[SUSSMAN]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
</person-group>
<source><![CDATA[Structure and interpretatión of Computer Programs]]></source>
<year>1984</year>
<publisher-name><![CDATA[MIT Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[AHO]]></surname>
<given-names><![CDATA[A.V.]]></given-names>
</name>
<name>
<surname><![CDATA[ULLMAN]]></surname>
<given-names><![CDATA[J.D.]]></given-names>
</name>
</person-group>
<source><![CDATA[Principles of Compiler Design]]></source>
<year>1979</year>
<publisher-name><![CDATA[Addison-Wesley Publishing Company]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BACKER]]></surname>
<given-names><![CDATA[H.G.]]></given-names>
</name>
<name>
<surname><![CDATA[HEWITT]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Incremental Garbage Collection of Processes. Procedings of the Symposium on Artificial Intelligence.]]></source>
<year>Augu</year>
<month>st</month>
<day> 1</day>
<volume>12</volume>
<edition>8</edition>
<page-range>55-59</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BARTLEY]]></surname>
<given-names><![CDATA[D.H.]]></given-names>
</name>
<name>
<surname><![CDATA[JENSEN]]></surname>
<given-names><![CDATA[J.C.]]></given-names>
</name>
</person-group>
<source><![CDATA[The implementation of PC Scheme]]></source>
<year>1986</year>
<conf-name><![CDATA[ Proceedings of the 1986 ACM Conference on Lisp and Functional Programming]]></conf-name>
<conf-loc> </conf-loc>
<page-range>86-93</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CHURCH]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[]]></source>
<year>1941</year>
<conf-name><![CDATA[ The Calculi of Lambda Convension. Annals of Mathematics Studies 6]]></conf-name>
<conf-loc> </conf-loc>
<publisher-name><![CDATA[Princenton University Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CURRY]]></surname>
<given-names><![CDATA[H.B.]]></given-names>
</name>
<name>
<surname><![CDATA[FEYS]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[Combinatory Logic]]></source>
<year>1958</year>
<publisher-loc><![CDATA[Amsterdam ]]></publisher-loc>
<publisher-name><![CDATA[North-Holland Publishing Company]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[DYBVIG]]></surname>
<given-names><![CDATA[R. K.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Scheme Programming Language]]></source>
<year>1987</year>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[DYBVIG]]></surname>
<given-names><![CDATA[R. K.]]></given-names>
</name>
</person-group>
<source><![CDATA[Three Implementation Models for Scheme]]></source>
<year>1987</year>
<publisher-name><![CDATA[PhD Disertation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[KERNIGHAN]]></surname>
<given-names><![CDATA[B.W.]]></given-names>
</name>
<name>
<surname><![CDATA[RITCHIE]]></surname>
<given-names><![CDATA[D.M.]]></given-names>
</name>
</person-group>
<source><![CDATA[The C Programming Language]]></source>
<year>1978</year>
<publisher-name><![CDATA[Prentice-Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[MCCARTHY]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Recursive Functions of Symbolic Expressions and Their Computation by Machine]]></source>
<year>apri</year>
<month>l </month>
<day>19</day>
<page-range>184-195</page-range><publisher-name><![CDATA[CACM 3]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[PETZOLD]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<source><![CDATA[Programming Windows 95]]></source>
<year>1996</year>
<publisher-name><![CDATA[Microsoft Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[STEELE]]></surname>
<given-names><![CDATA[G.L]]></given-names>
</name>
<name>
<surname><![CDATA[SUSSMAN]]></surname>
<given-names><![CDATA[G.J.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Revised Report on Scheme]]></source>
<year>1978</year>
<edition>452</edition>
<publisher-name><![CDATA[Massachusetts Institute of Technology Artificial Intelligencel]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SUSSMAN]]></surname>
<given-names><![CDATA[GJ]]></given-names>
</name>
<name>
<surname><![CDATA[STEELE]]></surname>
<given-names><![CDATA[GL]]></given-names>
</name>
</person-group>
<source><![CDATA[Scheme:: an Interpreter for Extended Lambda Calculus]]></source>
<year>1975</year>
<edition>349</edition>
<publisher-name><![CDATA[Massachusetts Institute of Technology Artificial Intelligence]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[STEELE]]></surname>
<given-names><![CDATA[G.L.]]></given-names>
</name>
</person-group>
<source><![CDATA[Common Lisp The Language]]></source>
<year></year>
<publisher-name><![CDATA[Second Edition]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
