|
Práctica III de CLIPS
|
|
1.- ¿Qué entiende que hace el programa CLIPS?
CLIPS es un entorno de programación diseñado para escribir aplicaciones llamadas sistemas expertos. Un sistema experto es un
programa que está especialmente dirigido a modelar la experiencia y/o el conocimiento humano.
CLIPS representa un entorno completo para el desarrollo de sistemas expertos: incluye un editor de programas u herramientas de depuración.
2.- ¿Qué se entiende por un programa dirigido por datos? ¿qué diferencia existe con respecto a la programación convencional?
En un programa dirigido por datos son esos datos (lo que llamamos hecho y/o instancias de objetos) los que estimulan la ejecución del
programa a través del motor de inferencia. Se dice entonces que CLIPS es un programa dirigido por datos.
En los lenguajes procedurales (Fortran, C, Basic...) la ejecución puede tener lugar sin datos, es decir, las sentencias son suficientes
para desencadenar la ejecución del programa.
3.- ¿Cuales son los elementos básicos del sistema CLIPS?
Las reglas, los hechos y los objetos.
4.- ¿Qué diferencia sustancial existe entre las primeras y las últimas versiones de CLIPS?
La diferencia más notable es que CLIPS, en versiones antiguas, solamente tenía capacidad de representar reglas y hechos. Sin
embargo, a partir de la versión 6.0 también es posible incluir en las cláusulas de las reglas objetos. Además, también es posible
utilizar los objetos sin necesidad de usar las reglas.
5.- Indique algunos sistemas operativos desde los que es posible ejecutar el entorno de CLIPS.
CLIPS se puede ejecutar en multitud de sistemas operativos: MS-Dos, Windows y Unix (Linux, Solaris, NetBSD...).
6.- Indique las órdenes de entrada y salida a CLIPS desde el sistema operativo MS-DOS.
La orden de entrada es clips. Una vez dentro de clips, desde el prompt CLIPS> podemos salir con la orden exit.
7.- Indique cuales son los elementos básicos de programación dentro del entorno de CLIPS.
Los elementos básicos del sistema CLIPS son:
- Tipos primitivos de datos.
- Funciones para la manipulación de los datos.
- Constructores.
8.- Enumere y describa los tipos primitivos de datos con los que trabaja CLIPS.
- Números enteros: un número se almacena entero cuando tiene los dígitos del 0 al 9 y un signo (opcional).
- Números en punto flotante: se almacena como número en punto flotante cuando se compone de dígitos del 0 al 9, un punto decimal, un
signo (opcional) y (e) para notación exponencial (también es opcional).
- Simbolo: es una secuencia de caracteres que comienza con cualquier caracter imprimible ASCII y viene seguido por cero o más
caracteres ASCII imprimibles.
- Cadena de caracteres: una cadena de caracteres comienza por una doble comilla("), va seguida por caracteres imprimibles ASCII y
acaba con doble comilla.
- Dirección externa: es la dirección de memoria de una estructura que devuelve una función escrita en otro lenguaje (por
ejemplo C) que ha sido integrada con CLIPS.
- Direcciones de hechos: Un hecho es una lista de valores atómicos que pueden estar referenciados posicionalmente (hechos
ordenados) o por el nombre (plantillas).
- Direcciones de instancias: una dirección de instancia solo se puede obtener asociando un valor de retorno de una función
llamada instance-address o asociando una variable a una instancia cuando tiene lugar el emparejamiento del antecedente de una regla
con los hechos de la base de hechos.
9.- Señale la diferencia entre un símbolo y una cadena de caracteres.
Un símbolo es una secuencia de caracteres que no sigue el formato de número.
Una cadena de caracteres es un conjunoto de caracteres que comienzan con una
doble comilla y va seguida por cero o más caracteres imprimibles y finaliza con
otra doble comilla.
La diferencia estriba en que se trata de diferentes tipos de datos (la cadena
"casa" no es lo mismo que el símbolo casa).
10.- Indique cuales son los delimitadores que pueden usarse para terminar la representación de un símbolo.
Un espacio en blanco, tabuladores, retornos de carro, saltos de línea, una doble comilla, paréntesis (apertura y cierre), ampersand
(&), barra vertical (|), símbolo menor (<), tilde (~) y punto y coma (;).
11.- Indique la importancia de los caracteres "?" y "$?". Indique la posibilidad de utilizarlos dentro de un símbolo.
El carácter "?" y la secuencia de caracteres "$?" están reservadas para
representar las valiables en CLIPS y no pueden situarse al comienzo de un
símbolo (aunque un símbolo puede contener esos caracteres).
12.- Indique la importancia del uso de paréntesis para la definición de un hecho.
El delimitador con el que termina el hecho es el paréntesis de cierre.
13.- Establezca la diferencia entre tipo de dato, campo, valor y variable. Describa un ejemplo indicando cada uno de estos términos.
Los tipos de datos permiten establecer valores que se representan mediante campos; los campos son zonas de memoria donde se almacena
un valor. Los valores pueden ser bien de campo simple, los cuales toman los tipos primitivos de datos, o bien
multicampo, formados por una secuencia de cero o más valores de campo simple. CLIPS representa los valores multicampo
encerrados entre paréntesis.
34 sería un ejemplo de campo simple, que sería una constante. (montaña 788 rio) sería el ejemplo correspondiente a multicampo.
14.- ¿Qué diferencia existe entre un valor de campo simple y un valor multicampo?. Describa algunos ejemplos.
Los valores de campo simple toman los tipos primitivos de datos a diferencia de los valores multicampo que están formados por una
secuencia de cero o más valores de campo simple. Los primeros no van entre paréntesis y los segundos si.
15.- Establezca la diferencia entre función y orden en CLIPS. Describa algunos ejemplos.
Las funciones en CLIPS devuelven algún valor, pero no modifican el entorno CLIPS. Una orden en CLIPS no devuelve ningún valor, pero
modifica el entorno CLIPS. Por ejemplo:
(+ 1 1) Es una función en CLIPS que no modifica el entorno, y devuelve el valor 2.
(assert (objetivo sumar)) Es una orden en CLIPS, no retorna ningún valor, y añade el objetivo sumar a la base de hechos.
16.- ¿Qué diferencia existe entre las funciones definidas por el usuario mediante el constructor deffunction y las
funciones escritas en otros lenguajes, como por ejemplo C, y enlazadas con CLIPS?.
Las funciones definidas con deffunction trabajan en modo intérprete.
17.- ¿Qué son funciones genéricas?
Las funciones genéricas son aquellas que permiten ejecutar distintas partes de código dependiendo de los parámetros que se les
pasen; se definen mediante los los constructores defgeneric y defmethod.
18.- Explique la notación de las funciones en CLIPS y describa un ejemplo.
Las llamadas de funciones en CLIPS usan una notación prefija (los argumentos de la función siempre aparecen después del nombre de
la función). Las llamadas a la función comienzan con un paréntesis izquierdo, seguido por el nombre de la función y a continuación
le siguen los argumentos de la función separados por uno o más espacios. Los argumentos de la función pueden ser tipos de datos
primitivos o la llamada a otra función. La llamada a la función finaliza con un paréntesis de cierre. Ejemplos de llamadas a las
funciones multiplicación (*) y suma (+):
(+ 3 4 5)
(* 5 6.0 2)
(+ 3 (* 8 9) 4)
(* 8 (+ 3 (* 2 3 4) 9) (* 3 4))
19.- ¿Qué diferencia existe entre funciones y expresiones en CLIPS?. Escriba un ejemplo.
Mientras que una función se refiere a una parte de código ejecutable identificado por el nombre de una función, una expresión se
refiere a una función en la que se especifican los argumentos. Así los anteriores ejemplos son expresiones que hacen llamadas a
las funciones * y +.
20.- Enumere los diferentes constructores con que cuenta CLIPS.
CLIPS cuenta con los siguientes constructores: defmodule, defrule, deffacts, deftemplate, defglobal, deffunction, defclass,
definstances, defmessagehandler, defgeneric y defmethod.
21.- Indique qué formas hay de incluir comentarios dentro del código escrito en CLIPS. Describa varios ejemplos.
En todos los constructores, excepto en defglobal, se pueden incluir comentarios ddespues del nombre. También se pueden incluir
usando el punto y coma (;), a partir del cual lo que haya escrito se ignorará hasta el siguiente salto de línea. Ejemplo:
(defrule nombres "regla para asignar nombres"
(assert (nombre ?x)) ; comentario
)
|