FAQ-CLIPS

download FAQ-CLIPS

of 59

Transcript of FAQ-CLIPS

` Intel.ligencia Articial

` Enginyeria en Informatica

FAQ de CLIPS

` Departament de Llenguatges i Sistemes Informatics

CURS 2011/2012 1Q

cbea

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. c b e a To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/ or send a letter to: Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

3

En la elaboracin de este documento han intervenido: Javier Biosca Ruz de Ojeda Jos Camallonga Gonzlez Jordi Chacn Chacn Adri Figuera Puig Mart Forns Estarellas Daniel Golobart Castellote Marina Grigoreva Borja Jara Garca Brian Jimnez Graca Ignacio Llatser Mart Victor Lloveras Daz Isaac Lpez Amat Vctor Martnez Jurado Llus Monsalve Carrasquilla Enric Munn Hernndez Jorge Muoz Gama Ivan Navarro Gonzlez Manuel Parrilla Gutierrez Marcos Pereira Varela Pere Sivecas Gibert Llus Suol Juliachs El responsable de la edicin/correccin/ampliacin del documento es Javier Bjar Alonso ([email protected])

ndice general

1. Introduccin 2. Protg 2.1. Cmo cambiar el nombre de las instancias en Protg . . . . . . . . . 2.2. Com exporto una ontologia de Protg a CLIPS? . . . . . . . . . . . . 2.3. Cmo exporto una ontologa de Protg a CLIPS? (2a posibilidad) . 2.4. Per qu em dna error CLIPS al tenir una instancia que hereta de ms . . . . . . . . . . . . . . . . . . . . . . . . duna classe? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 7 7 7 7 8 9 9 9 9 9 9 10 10 10 10 11 11 11 11 12 13 13 13 13 13 13 13 14 14 14 14 14 15 16 16 17 17 18

3. CLIPS 3.1. Instalacin del CLIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Cmo instalar CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2. Entorn nestres VS Consola de comandes . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Los hechos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1. Qu es un hecho en CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2. Qu es un hecho ordenado (order Facts)? . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3. Qu es un hecho no ordenado (deftemplates facts)? . . . . . . . . . . . . . . . . . . 3.2.4. Puedo tener un vector como slot? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.5. Puedo asignar propiedades a los slots? . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.6. Qu debo utilizar, hechos ordenados o no ordenados? . . . . . . . . . . . . . . . . . 3.2.7. Fets o Objectes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.8. Creacin de hechos (assert/deacts) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.9. Modicar un fet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.10. Com elimino un fet de la base de fets? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1. Variables a CLIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2. Com assignar un valor a una variable? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3. Cmo declarar variables globales? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4. Cmo trabajar con variables, sumando, restando, ... por ejemplo contadores? . . . . 3.3.5. Quina diferncia hi ha entre les variables del tipus ?nom_variable i les del tipus $?nom_variable? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.6. Qu signica linterrogant (?) quan va sol? . . . . . . . . . . . . . . . . . . . . . . . 3.3.7. Qu signica el dlar ($) quan va sol? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.8. Como puedo ver los hechos presentes en un momento determinado? . . . . . . . . . 3.4. Las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1. Cmo construir una regla? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2. Cmo gestionar la parte izquierda (LHS) de una regla? . . . . . . . . . . . . . . . . 3.4.3. Cmo obtener la direccin de hechos o instancias situados en LHS? . . . . . . . . . 3.4.4. Cmo hacer sentencias or en la izquierda de las reglas? . . . . . . . . . . . . . . . . 3.4.5. Com afegir una condici a la part esquerre duna regla? . . . . . . . . . . . . . . . . 3.4.6. Puede una misma regla ejecutarse ms de una vez? . . . . . . . . . . . . . . . . . . . 3.4.7. Com puc denir lordre de les regles? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.8. Com forar que una regla sigui la primera? . . . . . . . . . . . . . . . . . . . . . . . 3.4.9. Vull guardar certs valors que es fan servir durant lexecuci de diferents regles. Com ho puc fer? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. Las clases/instancias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1. Tengo que representar la jerarqua de un frame Es preferible aadir las subclases a la ontologa o bien diferenciarlas mediante un slot en la superclase? . . . . . . . . . .

. 18 . 19 . 19

1

2 3.5.2. 3.5.3. 3.5.4. 3.5.5. 3.5.6. 3.5.7.

ndice general Qu es un objeto? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Porqu usar objetos en contexto de la prctica de CLIPS de IA? . . . . . . . . . . . . Como se denen las clases? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Com consulto una instncia a partir duna regla? . . . . . . . . . . . . . . . . . . . . . Tengo problemas en condiciones de reglas con slots de instancias obtenidos con send . Tengo problemas con instancias obtenidas del slot de otra instancia en el patrn de una regla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.8. Cmo realizar una bsqueda de instancias que cumplan unas restricciones? . . . . . . 3.5.9. Cmo se interacta con objetos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.10. Como se interacta con las instancias de los objetos? . . . . . . . . . . . . . . . . . . 3.5.11. Uso de make-instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.12. Como generar automticamente nombres de instancia . . . . . . . . . . . . . . . . . . 3.5.13. Com fer un get/set dun slot duna classe? . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.14. Cmo acceder a una instancia cuyo nombre conocemos? . . . . . . . . . . . . . . . . 3.5.15. Obtenir el nom duna classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.16. Como convierto un INSTANCE-ADRESS en un INSTANCE-NAME? . . . . . . . . . 3.5.17. Com iterar a travs dun multi-slot? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.18. Cmo modicar/insertar/borrar valores en un multislot . . . . . . . . . . . . . . . . . 3.5.19. Cmo recorrer un atributo multievaluado . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.20. Cmo recorrer un atributo multievaluado de un atributo multievaluado (una matriz). 3.5.21. Com puc esborrar una instncia? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.22. Com imprimir una instncia? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.23. Com es navega entre instncies relacionades? . . . . . . . . . . . . . . . . . . . . . . . 3.6. Programacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1. Com introduir un comentari? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.2. Referenciar el valor null a CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.3. Formas de recorrer una lista: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.4. Formas de elegir una opcin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.5. Funciones con la clase String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.6. Cmo obtener el contenido de una variable en un string? . . . . . . . . . . . . . . . . 3.6.7. Como se crea una lista? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.8. Como borro un elemento de una lista? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.9. Como inserto elementos en una lista? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.10. Como modico elementos de una lista? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.11. Como averiguo el nmero de elementos de una lista? . . . . . . . . . . . . . . . . . . 3.6.12. Como consulto un valor de la lista a travs de su posicin? . . . . . . . . . . . . . . . 3.6.13. Como recorro todos los elementos de una lista? . . . . . . . . . . . . . . . . . . . . . 3.6.14. Com trobar si un element forma part duna llista? . . . . . . . . . . . . . . . . . . . . 3.6.15. Tinc un conjunt de smbols, per estan tots junts en un string. Com ho faig per separar-los i posar-los en un multislot? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.16. I si tinc un multislot i el vull transformar en un string? . . . . . . . . . . . . . . . . . 3.6.17. Cmo obtener un valor aleatorio? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.18. Comparaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7. Los mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.1. Qu s un mdul en CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.2. Particin en modulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.3. Cmo asignar una construccin en un mdulo? . . . . . . . . . . . . . . . . . . . . . 3.7.4. Com funcionen les clusules export i import? . . . . . . . . . . . . . . . . . . . . . . 3.7.5. Cmo cambio el mdulo actual? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.6. Como debera utilizar las focos en la practica de CLIPS? . . . . . . . . . . . . . . . . 3.8. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.1. Cmo se crea una funcin en CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.2. Explicacin de la estructura de una funcin en general. . . . . . . . . . . . . . . . . . 19 19 19 20 21 22 22 23 24 24 25 25 25 26 26 26 26 27 27 28 28 29 29 29 29 29 30 30 31 31 31 32 32 32 32 32 32 32 33 33 33 33 33 34 34 34 35 35 36 36 37

ndice general 3.8.3. Com denir un parmetre duna funci com una llista? . . . . . . . . . . . . . . . . . 3.8.4. Com puc utilitzar una funci a la part esquerra de les regles? . . . . . . . . . . . . . . 3.9. Entrada salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.1. Cmo se imprime por pantalla? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.2. Al imprimir por pantalla como hago un salto de lnea? . . . . . . . . . . . . . . . . . 3.9.3. Com imprimeixo una lnia en blanc? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.4. Com llegir de la entrada standard? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.5. Vull llegir un nmero (o conjunt de nmeros) com un string, per CLIPS mels llegeix com un enter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9.6. Haig de fer una pregunta a lusuari, i la resposta s un conjunt delements (no s dentrada quants), com ho faig per assignar-los a un multislot? . . . . . . . . . . . . . 3.10. Funciones tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.1. Obtener una respuesta de un conjunto predenido de respuestas posibles . . . . . . . . 3.10.2. Obtener un valor numrico comprendido en un rango . . . . . . . . . . . . . . . . . . . 3.10.3. Realizar una pregunta general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.4. Cmo se realiza una pregunta binaria? . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.5. Encuentra la instancia con valor mnimo para un slot . . . . . . . . . . . . . . . . . . 3.10.6. Elimina de la lista de instancias aquellas que por el multislot sl no contengan valor const 3.10.7. Random slot. Devuelve una instancia aleatoria de entre las que hay en la lista li. . . . 3.10.8. Recorre todos los elementos del slot que recibe por parmetro y los imprime por pantalla 3.11. Ejecucin de un programa CLIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.1. Cmo cargamos un programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.2. Cmo probar tu cdigo en CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.3. Qu es necesario hacer entre ejecucin y ejecucin? . . . . . . . . . . . . . . . . . . . 3.11.4. Cmo parar una ejecucin? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11.5. Como vuelvo al estado inicial y qu contendr ste? . . . . . . . . . . . . . . . . . . . 4. Consejos prcticos 4.1. Tinc el disseny de la prctica fet, per a lhora dimplementar comenar! Algun consell? . . . . . . . . . . . . . . . . . . . . . . 4.2. Como estructuro una practica de CLIPS? . . . . . . . . . . . . . 4.3. Com crear un ux de preguntes? . . . . . . . . . . . . . . . . . . 4.3.1. Com puc ordenar aquest ux de preguntes? . . . . . . . . 4.3.2. I si vull saltar-me una pregunta? . . . . . . . . . . . . . . 4.3.3. Com inicialitzar el ux del programa? . . . . . . . . . . . 4.4. Uso de la funcin modify para ir guardando resultados preferidos 4.5. Creacin de la plantilla de recomendacin . . . . . . . . . . . . . tot aix no s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ni per . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . on . . . . . . . . . . . . . . . .

3 38 38 38 38 39 39 39 40 40 40 40 41 41 41 41 42 43 43 43 43 44 44 44 44 45 . . . . . . . . 45 45 46 46 47 48 48 49

5. Errores frecuentes 5.1. Quan obro un txer en CLIPS em dona un error! . . . . . . . . . . . . . . . 5.2. Codicaci de carcters a CLIPS . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Por qu me dan error algunas de las restricciones que pongo en los slots en las importo en CLIPS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4. Tengo problemas con la herncia de slots en las clases que he denido . . . 5.5. Qu signica lerror OBJRTBLD5? . . . . . . . . . . . . . . . . . . . . . . . 5.6. Antes compilaba correctamente y ahora da warnings. . . . . . . . . . . . . . 5.7. No puedo editar mi chero en clips. . . . . . . . . . . . . . . . . . . . . . . . 5.8. Redening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9. Problemas al consultar las instancias relacionadas con otras . . . . . . . . . 5.10. Unable to nde class X cuando denimos instancias . . . . . . . . . . . . . 5.11. Expected the beginning of a construct (cuando denimos instancias). . . . . 5.12. Compila pero no compara bien dos elementos . . . . . . . . . . . . . . . . . 5.13. Expected the beginning of a constructor . . . . . . . . . . . . . . . . . . . . 5.14. Missing function declaration for defrule/deunction/... . . . . . . . . . . . .

51 . . . . . . . . . . 51 . . . . . . . . . . 51 Protg cuando . . . . . . . . . . 51 . . . . . . . . . . 51 . . . . . . . . . . 52 . . . . . . . . . . 52 . . . . . . . . . . 52 . . . . . . . . . . 52 . . . . . . . . . . 52 . . . . . . . . . . 52 . . . . . . . . . . 53 . . . . . . . . . . 53 . . . . . . . . . . 53 . . . . . . . . . . 53

4

ndice general 5.15. Check appropiate syntax for if/switch/loop-for-count/... . . . . . . . . . . . . . . . . . . . . . 54 5.16. Problemas con parntesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

6. Referencias 55 6.1. On puc trobar informaci sobre el llenguatge CLIPS? . . . . . . . . . . . . . . . . . . . . . . . 55 6.2. Otras referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

1. Introduccin

Este documento es el resultado de la recopilacin de los documentos escritos durante el desarrollo de la prctica de sistemas basados en el conocimiento el cuatrimestre de otoo del curso 2007-2008. El objetivo de estos documentos era recoger las dudas frecuentes que se encuentra un alumno durante el desarrollo de la prctica de SBCs y consejos prcticos que puedan ayudar en el desarrollo. Este documento recoge principalmente dudas frecuentes sobre el entorno CLIPS y su lenguaje de programacin.

5

6

Captulo 1. Introduccin

2. Protg

Para saber como funciona Protg usad la ayuda de la aplicacin y el material correspondiente, estas cuestiones se reeren a como integrar lo que se desarrolla en Protg con CLIPS

2.1 Cmo cambiar el nombre de las instancias en ProtgEn realidad no se trata de cambiar el nombre de las instancias, sino de darle algo ms visual que un nmero para poder hacer las relaciones. Si os encontris en la pestaa de crear instancias, el ltimo botn es una echa hacia abajo. Darle y luego, set display slots. Ah debis indicar con que slot queris referenciar la instancia.

2.2 Com exporto una ontologia de Protg a CLIPS?A Protg, ves a File Export to Format CLIPS. Un cop fet aix, es crearan dos nous txers amb les classes i instncies de lontologia (nom.pont i nom.pins, respectivament). Desprs, obre aquests dos txers amb un editor de text i copia el seu contingut al txer CLIPS de la segent manera: copy-paste de nom.pont (definstances instancies copy-paste de nom.pins )

2.3 Cmo exporto una ontologa de Protg a CLIPS? (2a posibilidad)Alternativamente a hacer corta y pega de los cheros de protege en el chero de CLIPS se puede crear un chero que cargue todos los cheros sin tener que juntarlos. Para ello hay que crear un chero que incluya las rdenes de carga de los diferentes cheros. Por ejemplo podemos llamar a este chero carga.clp. El contenido de este chero ser: (load "PATH/nom.pont") (load-instances "PATH/nom.pins") (load "PATH/fichero-de-reglas.clp") Donde PATH es el directorio donde se encuentran vuestros cheros. Este chero se ha de cargar desde el intrprete mediante la orden batch ((batch "carga.clp")) o con la opcin de men load batch. Usando la instruccin load-instances evitamos tener que aadir al chero de instancias la instruccin denstances.

2.4 Per qu em dna error CLIPS al tenir una instancia que hereta de ms duna classe?

7

8

Captulo 2. Protg

Protg permet lherncia mltiple en instncies, per CLIPS no. En CLIPS noms poden tenir herncia mltiple las classes, per no les instncies. Aix es aix perque el lenguatge de CLIPS es orientat a objectes, no es realment un lenguatge dontologes. La manera ms senzilla de simular-ho, si les clases no tenen ancestres comuns, s tenir classes que representin aquesta herncia mltiple i fer que les instncies pengin delles, que es com es faria a un llenguatge orientat a objectes. En el cas de tenir ancestres comuns no es pot fer, lunica manera es duplicar la instancia amb noms diferents i penjar-les de les clases on es vol tenir-la. De totes maneres, el CLIPS permet recuperar fcilment les instncies que tenen un valor especc en un slot, pel qual el ms senzill s tenir una nica jerarquia i incloure altres possibles classicacions com a slots, encara que obviament perdrem la posibilitat de fer servir una jerarquia de valors per aquest.

3. CLIPS

3.1 Instalacin del CLIPS3.1.1 Cmo instalar CLIPS?La herramienta CLIPS es multiplataforma y esta disponible para los tres S.O ms utilizados: Microsoft Windows, Linux y Mac OS X. Cmo instalar CLIPS en Windows? Primero de todo debemos bajarnos el programa de la pgina ocial de CLIPS, accesible desde este link (http://clipsrules.sourceforge.net/) . Desde el rea de descarga os podreis bajar el instalador para windows. Cmo instalar CLIPS en Linux? En muchas distribuciones de Linux CLIPS esta disponible como un paquete adicional, el paquete suele instalar la versin con interfaz grco. Si no encuentras el paquete especco para la distribucion que usas siempre puedes compilarlo a partir del paquete con los fuentes. Tambin est la posibilidad de utilisar el emulador de windows WINE. Una vez instalado el emulador se puede instalar CLIPS y este funcion igual que sobre windows. Cmo instalar CLIPS en Mac OS X? Primero de todo debemos bajarnos el programa de la pgina ocial de CLIPS, accesible desde este link (http://clipsrules.sourceforge.net/ ). Desde el rea de descarga podeis bajar el intalador para MAC OS X.

3.1.2 Entorn nestres VS Consola de comandesEncara que lentorn de nestres s molt ms intutiu, CLIPS a la seva versi en lnea de comandes s molt ms rpid (segurament perqu no ha de mostrar en tot moment lagenda de fets, les instancies, les regles, etc..). La diferencia de velocitat s molt notable, en cas de problemes de rendiment o de sensaci que lentorn de nestres es queda penjat (o directament es tanca sense previ avs) recomanem provar la versi en lnea de comandes.

3.2 Los hechos3.2.1 Qu es un hecho en CLIPS?Conceptualmente, un hecho representa un dato abstracto del cual almacenamos valores. Se puede ver como una lista de campos, donde el primer campo hace referencia al dato al cual le asignamos una lista de valores que le suceden, teniendo una relacin entre s. Formalmente, el primer campo es un smbolo y los campos restantes son valores.

9

10 (smbolo valor1 valor2 ... valorN)

Captulo 3. CLIPS

3.2.2 Qu es un hecho ordenado (order Facts)?Un hecho ordenado tienen formato libre, por lo tanto no existe restriccin alguna en el orden de los campos. Los campos de un hecho ordenado pueden ser de cualquier tipo primitivo de datos, excepto el primero, que debe ser un smbolo. Como ejemplo tenemos:1 2

(hermanos Antonio Javier Carlos) (padre Pedro David)

3.2.3 Qu es un hecho no ordenado (deftemplates facts)?A travs de los hechos no ordenados podemos abstraernos de la estructura de un hecho, asignado un nombre a cada campo (slots).1 2 3 4

(deftemplate nombre-template "comentario" (slot nombre-slot (tipo-del-slot)) (multislot nombre-slot (tipo-del-slot)) )

Por ejemplo:1 2 3 4

(deftemplate avin (slot nombre_avion (type STRING)) (slot compania (type STRING)) (slot numero_plazas (type INTEGER) (default 100))

3.2.4 Puedo tener un vector como slot?Si, debe declararse como multislot.

3.2.5 Puedo asignar propiedades a los slots?S, las ms importantes son: Type: El tipo de dato primitivo que contiene (en maysculas). Allowed-X: Permite especicar un conjunto de valores permitidos. Siendo X un tipo de datos primitivo (en minsculas y plural) si el slot toma un valor del tipo X debe pertenecer a los valores permitidos. X puede ser values especicando entonces todos los valores posibles que puede tomar el slot independientemente del tipo de dato. Range: Especica un rango para slots numricos. Cardinality: Nmeros mnimo y mximo de elementos que puede tener un multislot. Default: Valor por defecto. Si ponemos ?NONE como valor por defecto signicar que no se podr crear la instancia a no ser que se especique el valor de ese slot.1 2

(deftemplate estudiante (slot edad (type INTEGER) (range 0 99))

3.2 Los hechos (multislot asignaturas (type STRING) (cardinality 1 5)) (slot num-carreres (default 1)) (multislot notas (allowed-strings "MH" "NP")) )

11

3 4 5 6

3.2.6 Qu debo utilizar, hechos ordenados o no ordenados?Como se puede intuir si tenemos un conjunto de hechos los cuales conceptualmente pertenecen al mismo mbito, ser una solucin ms elegante agruparlos a travs de un deftemplate. En caso que tengamos que algn hecho aislado, ser mas sencillo declararlo como un hecho ordenado.

3.2.7 Fets o Objectes?Veient la denici de deftemplate podem confondrens a lhora de decidir si fer servir fets o fer servir objectes. Deixant de banda altres diferncies ja comentades (les classes suporten jerarquia de classes, herncia, etc..), els objectes es fan servir per representar el coneixement (mitjanant un conjunt dinstncies). Aix que, generalment, farem servir classes i objectes per representar coneixement, mentre que farem servir els fets per portar control sobre lexecuci del problema. Per exemple, podrem denir un deftemplate per emmagatzemar un resultat o per poder controlar lestat de lexecuci. A la prctica de Mikeo (penjada a la web de lassignatura) tenem un deftemplate habitacion-actual1 2 3 4 5 6 7

(deftemplate habitacion-actual (slot habitacion) (slot area-restante) (slot presupuesto-restante) (slot precio-total) (slot prioridad-actual) )

Amb el qual controlvem la construcci duna habitaci. Assignvem una instncia de la classe habitaci al slot habitacion de habitacion-actual i mitjanant una srie de regles que feien unicaci amb habitacion-actual actuvem sobre lhabitaci duna manera o dun altre.

3.2.8 Creacin de hechos (assert/deacts)Si queremos crear un solo hecho utilizaremos el comando assert. Por ejemplo: (assert (casa roja)) Si por el contrario queremos crear una estructura ordenada de hechos utilizaremos deacts: (deffacts mishechos (casa roja) (pelota azul))

3.2.9 Modicar un fetPer modicar un fet (per exemple, molt til si estem treballant amb deftemplates) ho podem fer mitjanant (modify ). Per exemple, si tingussim el deftemplate persona1 2 3 4

(deftemplate persona (slot nom) (slot edad) (slot dni)

12 I hagussim afegit el fet: (assert (persona (nom "Pepe")(edad 25)(dni "46974431"))) I el fet: (assert (aniversari "46974431")) Podrem tenir la segent regla:1 2 3 4 5 6 7

Captulo 3. CLIPS

(defrule aniv ?aniversari