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