excusez mon anglais, je suis espagnol. J'ai un problème avec les configurations de mon ordinateur système expert dans CLIPS.règle qui ne fonctionne pas
Ma règle "preciogamingoc" ne fonctionne pas, j'ai essayé de mille façons mais ne fonctionne pas.
Je laisse le code ici. Je ne sais pas comment le mettre mieux, désolé pour cela.
;;****TEMPLATES*****
(deftemplate pc
(slot tipo)
(slot oc)
(multislot procesador)
(multislot ram)
(multislot placabase)
(multislot discoduro)
(multislot grafica)
(multislot fuente)
(slot precio))
;;****FUNCTIONS*****
(deffunction pregunta (?pregunta $?respuestas-posibles)
(printout t ?pregunta)
(bind ?respuesta (read))
(if (lexemep ?respuesta)
then (bind ?respuesta (lowcase ?respuesta)))
(while (not (member ?respuesta ?respuestas-posibles)) do
(printout t ?pregunta)
(bind ?respuesta (read))
(if (lexemep ?respuesta)
then (bind ?respuesta (lowcase ?respuesta))))
?respuesta)
(deffunction sino (?pregunta)
(bind ?respuesta (pregunta ?pregunta si no s n))
(if (or (eq ?respuesta si) (eq ?respuesta s))
then TRUE
else FALSE))
(deffunction tipo (?pregunta)
(bind ?respuesta (pregunta ?pregunta g d o))
(switch ?respuesta
(case g then (return g))
(case d then (return d))
(case o then (return o))
))
;;******FACTS*******
(deffacts inicia
(pc))
;;******RULES*******
(defrule tipopc
?A <- (pc (procesador)(ram)(placabase)(discoduro)(grafica)(fuente))
=>
(switch (tipo "Tipo (juegos:g/diseño:d/otros:o)? ")
(case g then (modify ?A (tipo g)(oc nose)(procesador "i5 4690_Intel")
(ram "2x4GB 2133 cl9")
(placabase "Gigabyte_H97M-HD3 ejemplo")
(discoduro "1Tb")
(grafica "GTX 960")
(fuente "700W+ silver")
(precio 550)))
(case d then (modify ?A (tipo d)(oc nose)(procesador "i7 4790_Intel")
(ram "2x8GB 2133 cl9")
(placabase "Gigabyte_H97M-HD3 ejemplo")
(discoduro "1Tb HDD + 120gb SSD")
(grafica "kuadro k620")
(fuente "700W+ silver")
(precio 700)))
(case o then (modify ?A (tipo o)(oc nose)(procesador "i3 6100_Intel")
(ram "2x4GB 2400 cl12 DDR4")
(placabase "Msi H110M PRO-VH")
(discoduro "1Tb")
(grafica "no incluida")
(fuente "450W+ bronze")
(precio 300)))))
(defrule oc
?A <- (pc(tipo g)(oc nose))
=>
(if (sino "Hará overclock al procesador (si/no)?: ")
then (modify ?A (oc si)))
)
(defrule preciogamingoc
?A <- (pc (tipo g) (oc si) (procesador) (ram) (placabase) (discoduro) (grafica) (fuente))
=>
(printout t "Veo que su sistema será destinado a juegos y que además se le podrá hacer overclock." crlf
"Ahora debe introducir el presupuesto medio para que podamos darle una configuración mas concreta." crlf
"Introduzca su presupuesto de referencia(>= 750): ")
(bind ?precio (read))
(if (and(>= ?precio 750)(< ?precio 850))
;;then ((printout t "bien"crlf))
then (modify ?A (procesador "i5 4690K_Intel")
(ram "2x8GB 2133 cl9")
(placabase "Gigabyte_Z97X gaming 3 ejemplo")
(discoduro "1Tb")
(grafica "GTX 970")
(fuente "700W+ silver")
(precio 750)))
;;(else (if (>= ?precio 850)
;;then (modify ?C (procesador "i7 4790K_Intel")
;;(ram "2x8GB 2133 cl9")
;;(placabase "Gigabyte_Z97X gaming 5 ejemplo")
;;(discoduro "1Tb HDD")
;;(grafica "GTX 970")
;;(fuente "700W+ silver")
;(precio 850))))
)
;;*******MAIN*******
(defrule inicio
(declare (salience 1))
=>
(printout t crlf)
(printout t "Sistema Experto de Configuracion de Ordenadores")
(printout t crlf crlf))
(defrule presupuesto
(declare (salience -1))
(pc (procesador ?A)(ram ?F)(placabase ?B)(discoduro ?M)(grafica ?G)(fuente ?P)(precio ?O))
=>
(printout t crlf crlf "-.PRESUPUESTO.-" crlf crlf)
(printout t "PROCESADOR: " ?A crlf)
(printout t "RAM: " ?F crlf)
(printout t "PLACA BASE: " ?B crlf)
(printout t "DISCO DURO:" ?M crlf)
(printout t "GRAFICA: " ?G crlf)
(printout t "FUENTE: " ?P crlf crlf)
(printout t "PRECIO: " ?O crlf)
)