Sistemas Expertos

Principal Introduccion Componentes Desarrollo Campos de Aplicacion Lenguajes Ejemplos Descarga

 

          A continuación voy a daros una breve descripción sobre los dos lenguajes más importantes en el desarrollo de Sistemas Expertos, para que os podáis hacer una idea de como se desarrolla este tipo de software "inteligente".

 

       LISP

          El nombre LISP es la abreviatura de List-Processing, ya que el LISP fue desarrollado para el procesamiento de listas. La lista es la estructura más importante de LISP. El lenguaje LISP fue diseñado ya a finales de los años 50 por McCarthy. A lo largo de los últimos años se han desarrollado muchos dialectos, por ejemplo MACLISP, COMMONLISP, INTERLISP, ZETALISP, donde el COMMONLISP se está imponiendo cada vez más como estándar.

          Presentaré ahora ya el LISP como lenguaje propio, dejando ya atrás su historia. En LISP se dan los siguientes conceptos característicos:

          Listas y Átomos: La estructura más importante es la lista. Los atomos pueden subordinarse a cualidades.

          La Función: Cada función LISP y cada programa LISP tiene estructura de lista.Los programas no pueden distinguirse sintácticamente de los datos. LISP ofrece sus propias funciones básicas.

          Forma de Trabajo: LISP es un lenguaje funcional. Ofrece la posibilidad de realizar definiciones recursivas de funciones. La unión de procedimientos se realiza de forma dinámica, es decir en plena ejecución, y no como en otros lenguajes de programación. El sistema realiza automáticamente una gestión dinámica de memoria.

          Como os he descrito antes, la estructura más importante en LISP es la lista por lo que, para los que no lo conocéis voy a poneros un pequeño ejemplo:

        Ejemplo :

                        (A (B C) D) es una lista con tres elementos

                                        A     átomo

                                        ( B C ) lista de átomos B y C

                                        D     átomo

                        También está permitida una lista vacía , "( )" ó " NIL" , que significa lo mismo.

          Con esta estructura podemos configurar estructuras de cualquier complejidad, tan grandes como queramos.

          Los átomos son números , cadenas de caracteres o símbolos. Un símbolo puede tener varios valores, al igual que una variable en otros lenguajes de programación, como por ejemplo un número, o también puede ser el nombre de una función, o incluso ambos. Además a un símbolo pueden subordinarse cualidades, que además del valor del símbolo, contienen información adicional.Estas cualidades también reciben el nombre de atributos.

          Para los más interesados en el funcionamiento de este lenguaje, voy a explicar brevemente alguna característica de cómo esta implementado LISP, y de cómo "funciona por dentro".

            Componentes de un sistema LISP.

          Un componente importante de un sistema LISP es la gestión dinámica de la memoria. El sistema administrará el espacio en la memoria para las listas en constante modificación, sin que el usuario lo deba solicitar. Libera los espacios de memoria que ya no son necesarios y los pone a disposición de usos posteriores. La necesidad de este proceso se deriva de la estructura básica de LISP, las listas, que se modifican de forma dinámica e ilimitada.

          Además un sistema LISP abarca bastante más que el solo intérprete del lenguaje LISP. Consta de algunos cómodos módulos que ofrecen ayuda en el desarrollo y control del progreso en programas, como son el Editor, el File-System y el Trace.Por supuestos estos módulos sólo estan en versiones de LISP que contengan la conocida interfaz gráfica IDE típica de los modernos lenguajes visuales.(IDE = entorno de desarrollo integrado).

                                        PROLOG

          PROLOG  es la abreviatura de PROgramación LOGica, con lo que hacemos mención a la procedencia del lenguaje: Es una realización de lógica de predicados, como lenguaje de programación.

          En la actualidad, el PROLOG se aplica como lenguaje de desarrollo en aplicaciones de Inteligencia Artificial en diferentes proyectos de Europa. En los Estados Unidos, el LISP está más extendido que el PROLOG. Pero para la mayoría de los terminales de trabajo de Inteligencia Artificial se ofrece también el PROLOG.

          Como una especie de semiestándar se han establecido el DECsystem-10 PROLOG de Edimburgo y el PROLOG descrito en el libro "PROGRAMMING IN PROLOG" de W.F.Clocksin y C.S.Melish. La mayoría de los dialectos PROLOG se basan en este y contienen el DECsystem-10 PROLOG en su ámbito linguístico.

          Al contrario que el LISP (y otros lenguajes), en el PROLOG los programas son confeccionados de forma distinta. A los interesados en pueden leer a Kowalski que escribió un articulo con el título" Algorithm = Logic + Control". Con esto pretende decirnos que los algoritmos pueden ser divididos en su lógica y en sus mecanismos de control.

          La lógica se representa en forma de predicados. Estos predicados aparecen en tres formas distintas: como hechos, como reglas y como preguntas. La lógica formulada como hechos y reglas se define como base de conocimientos. A esta base de conocimientos se le pueden formular preguntas.

          Los mecanismos importantes del PROLOG son : recursividad, instanciación, verificación, unificación, backtracking e inversión.

          La Recursividad representa la estructura más importante en el desarrollo del programa. En la sintaxis del PROLOG no existen los bucles FOR ni los saltos; los bucles WHILE son de difícil incorporación, ya que las variables sólo pueden unificarse una sóla vez. La recursión es más apropiada que otras estructuras de desarrollo para procesar estructuras de datos recursivas como son las listas y destacan en estos casos por una representación más sencilla y de mayor claridad.

          La Instanciación es la unión de una variable a una constante o estructura. La variable ligada se comporta luego como una constante.

          La Verificación es el intento de derivar la estructura a comprobar de una pregunta desde la base de conocimientos, es decir, desde los hechos y reglas. Si es posible, la estructura es verdadera, en caso contrario es falsa. 

          La Unificación es el componente principal de la verificación de estructuras. Una estructura estará comprobada cuando puede ser unificada con un hecho, o cuando puede unificarse con la cabecera de una regla y las estructuras del cuerpo de dicha regla pueden ser verificadas.

 

          Como introducción creo que ha podido ser un primer paso para conocer un poquito estas dos herramientas que tenemos para crear nuestros programas "inteligentes".Y ya sabéis si os ha gustado el tema os animo a desarrollar un sistema experto dentro del ámbito que más os guste, utilizando cualquiera de estas dos herramientas de programación.

 

<Anterior : Capos de Aplicación>             <Siguiente : Ejemplos>