; ; Esto no lo usaremos; sólo sirve para la documentación ; ; ;;; ######################################################### ;;; Comparación y ordenación de actividades ;;; ######################################################### ; (compara ?a ?b) ; Hay varias condiciones, que se miran en un orden concreto. Si la 1a ya permite saber cuál es mejor, usarla, Si no, se usa la siguiente condición. ; ; Criterios: ; ; c="ser obligatoria" ; --------------------- ; ?a sí y ?b no --> ?a es mejor ; ?a no y ?b sí --> ?b es mejor ; ; c="ser prohibida" ; ------------------- ; ?a sí y ?b no --> ?b es mejor ; ?a no y ?b sí --> ?a es mejor ; ; c="ser admisible para la edad del grupo del usuario" ; ="minG >= minA y maxG <= maxA ; (minG: edad del más turista más pequeño del grupo, etc. A: actividad) ; ------------------ ; ?a sí y ?b no --> ?a es mejor ; ?a no y ?b sí --> ?b es mejor ; ; c="aparecer entre los gustos que ha dicho el usuario" ; ------------------------------------------------------ ; ?a sí y ?b no --> ?a es mejor ; ?a no y ?b sí --> ?b es mejor ; ; c="ser cara" ; ="precio_actividad > precio_m'aximo" ; ------------ ; ?a sí y ?b no --> ?b es mejor ; ?a no y ?b sí --> ?a es mejor ; [nota]: si no importa el precio, precio_m'aximo será 100 (muy alto), y ambas actividades darán que NO son caras, por tanto ninguna es mejor que otra con este criterio y se pasa al siguiente ; ; c="ser apropiada en duración" ; ="duración_actividad <= duraci'on (máxima)" ; ------------------------------ ; ?a sí y ?b no --> ?a es mejor ; ?a no y ?b sí --> ?b es mejor ; ; c="empezar en la franja que le gusta al usuario" ; ------------------------------------------------ ; ?a sí y ?b no --> ?a es mejor ; ?a no y ?b sí --> ?b es mejor ; ; c="ser destinada a un tamaño de grupo como el del usuario" ; ="usuario_va_sólo == actividad_individual" ; ----------------------------------------------------------- ; ?a sí y ?b no --> ?a es mejor ; ?a no y ?b sí --> ?b es mejor ; ; Ya no quedan más criterios. Coger la más barata ; precio(?a) ?a es mejor ; y si no --> ?b es mejor ; ; FIN. (defrule aa (gusta Escultura) => (bind ?esc true) ) (deffunction MAIN::compara (?a ?b) (printout t "Comparando a y b" crlf) (printout t "Precios: " (send ?a get-precio) " y " (send ?b get-precio) crlf) (printout t "Clases: " (class ?a) " y " (class ?b) crlf) ; Obligatoriedad (bind ?ca (eq (class ?a) Escultura)) (printout t "Me ha dado: " ?ca crlf) ; (bind ?g (gusta Escultura)) (printout t "Pongo ?esc: " ?esc crlf) ; seguir probando... ; (if (gusta Escultura) then ; (printout t "Me gusta la escultura." crlf) ; else ; (printout t "No me gusta la escultura." crlf) ; ) ; (printout t "¿Me gusta ?a ?: " (gusta ?a) crlf) (return 1) ) ; (bind ?primero 0) ; (if (> ?num 2) ; then ; (bind ?primero (random 1 ?num)) ; (send ?objeto put-tarde (create$ (nth$ ?primero ?lista)))) ; (bind ?primero (nth$ ?primero ?lista)) ; (bind ?lista (delete-member$ ?lista ?primero)) ; (send ?primero put-hecho si)) ; (bind ?lista ?lista))