Cuestiones de la práctica 9.



1. ¿Cuál es la sintaxis para la definición de un módulo y los diferentes aspectos de la portabilidad de los elementos de conocimiento creados a partir de los constructores?
 

(defmodule <nombre-del-módulo> [<comentario>]
<especificación-portabilidad>*)
<especificación-portabilidad> :: = (export <port-item>) |
(import <module-name> <port-item>)
<port-item>::=?ALL
?NONE
<constructor-portable> ?ALL |
<constructor-portable> ?NONE |
<constructor-portable> <nombre-constructor> +

<constructor-portable> ::= deftemplate | defclass | defglobal |
deffunction | defgeneric

2. ¿Es posible redefinir los módulos?

Un módulo no puede ser redefinido una vez que ha sido definido, con la excepción de MAIN


3. ¿Qué son las clases predefinidas del sistema? ¿Qué alcance tienen estas clases predefinidas del sistema para los módulos que se crean?

Son clases que siempre están disponibles para todos los módulos, de modo que no es necesario importarlas o exportarlas. Todas las clases predefinidas del sistema pertenecen al módulo MAIN.


4. ¿Cómo se hace referencia a los elementos de conocimientos localizados en un módulo?

Cuando definimos un elemento de conocimiento mediante un constructor, se puede especificar en qué módulo desea ser colocado. En los constructores se puede especificar el módulo de ubicación si se incluye como parte del nombre.


5. ¿Cuáles son las reglas que rigen la exportación y la importación de elementos de conocimiento entre módulos?

Para que un módulo B pueda hacer uso de un elemento de conocimiento del módulo A, primero el módulo A debe exportar el elemento y después el módulo B debe importarlo. Vemos un ejemplo:
(defmodule A (export deftemplate persona))

(defmodule B (import A deftemplate persona))

En este caso, el módulo A exporta la plantilla persona, que es importada por el módulo B.

6. ¿Cuáles son y qué significado tienen los diferentes tipos de especificaciones que se puedan dar con la palabra reservada export?

?ALL
Exporta todos los constructores visibles en él:
(export ?ALL)
Exporta todos los constructores válidos de un tipo particular visible en él:
(export deftemplate ?ALL)
Se puede exportar también constructores específicos de un tipo particular que son visibles a él:
(export defglobal x y)
?NONE
No se va a exportar ningún elemento de conocimiento desde un módulo o que ningún elemento de conocimiento de un tipo particular va a ser exportado desde ese módulo
 

7. ¿Qué tipos de elementos de conocimiento pueden ser exportados y cuales no?

Se pueden exportar los elementos definidos mediante deftemplate, defclass, defglobal, deffunction y defgeneric

No se pueden exportar los elementos de conocimiento definidos mediante deffacts, definstances y defrule


8. ¿Cuáles son y qué significado tienen los diferentes tipos de especificaciones que se pueden dar con la palabra reservada import?

Se puede importar todos los elementos válidos visibles en el módulo especificado
(import B ?ALL)

Se puede importar todos los elementos de un módulo construidos a partir de un tipo de constructor y que esté visible al módulo que se especifique.
(import B deftemplate ?ALL)

Se puede importar elementos de conocimiento específicos de un tipo que estén visibles a él
(import B defglobal x y)

9. ¿Qué tipos de elementos de conocimiento pueden ser importados y cuáles no?

Se pueden exportar los elementos definidos mediante deftemplates, defclasses, defglobals, deffunctions y defgeneric.
No se puden exportar los elementos definidos mediante deffacts, definstances y defrules.
Así pues, se pueden importar los elementos que previamente pueden ser exportados.

10. ¿Cómo se comportan las plantillas y las instancias con respecto a la exportación e importación?

Las plantillas e instancias son sólo visibles a aquellos módulos en los que se definen o a los módulos a los que importan los correspondientes deftemplate o defclass.
Esto permite que en un módulo existan reglas que puedan ver sólo aquellos hechos e instancias que son de interés.
 

11. ¿En qué forma contribuye la representación del conocimiento mediante módulos para controlar el razonamiento?

Como se ha dicho en el ejemplo anterior, en un módulo puede haber una plantilla, y ésta se puede satisfacer sólo con aquellos hechos que estén en dicho módulo, los que nos permite separar en módulos las reglas con aquellos hechos o instancias que sean de interés.

12. ¿Qué se entiende por la pila de módulos activos? ¿Qué interés puede tener para controlar el flujo de razonamiento?

La pila de módulos activos es el lugar donde se encuentran los módulos de un programa. Cuando se está ejecutando un módulo y éste ya no tiene nada que hacer, entonces el siguiente módulo que se encuentre en la pila, se queda como módulo activo.
Se puede alterar el curso normal de ejecución del programa. Usando la orden focus podemos incluir un nuevo módulo en la pila de módulos activos y se pase a la agenda de este módulo el control de razonamiento. Usando la orden return en el consecuente de una regla lo que se pasaría como módulo activo el siguiente de la pila y el control de razonamiento lo llevaría su agenda asociada.

13. ¿Qué efecto provoca la orden return en el consecuente de una regla?

Como hemos comentado anteriormente, se pasaría como módulo activo al siguiente de la pila de módulos activos y el control de razonamiento lo llevaría su agenda asociada.

14. ¿Qué utilidad tiene la orden focus?

También lo hemos comentado anteriormente, con esta orden incluimos un nuevo módulo en la pila de módulos activos y se pasa a la agenda de este módulo el control de razonamiento.

15. Indíquese y discuta las principales ventajas del uso de los módulos en la representación del conocimiento mediante reglas?

La principal ventaja es poder estructurar el programa mediante módulos, los que nos facilitan la comprensión y resolución de los problemas.
Mediante los módulos podemos declarar reglas y hechos, los cuales sólo utilizaremos una vez y para una regla, pues si juntamos tanto la regla como los hechos, nos facilitará la comprensión del problema.
 


Volver a la pagina anterior
Cerrar Ventana