2017-10-20 7 views
0
(deftemplate bikelife 
    (slot name) 
    (slot type)) 

(deffacts bike 
    (bikelife (name Strida) (type low_lifestyle)) 
    (bikelife (name Brompton) (type med_lifestyle)) 
    (bikelife (name Molton) (type high_lifestyle)) 
    (bikelife (name Specialized_AlleComp) (type low_sport)) 
    (bikelife (name Specialized_Tarmac) (type medium_sport)) 
    (bikelife (name Pinarello_DOGMA_F8) (type high_sport))) 
(defrule rule-1 
    (budget ?x) 
    (test (< ?x 300)) 
    (use_for lifestyle) 
    => 
    (assert (recommend low_lifestyle))) 

(defrule rule-2 
(budget ?x) 
(test (< ?x 300)) 
(use_for sport) 
=> 
(assert (recommend low_sport))) 

(defrule rule-3 

(budget ?x) 
(test (and (> ?x 300) (< ?x <500))) 
(use_for lifestyle) 
=> 
(assert (recommend med_lifestyle))) 

(defrule rule-4 

(budget ?x) 
(test (and (> ?x 300) (< ?x <500))) 
(use_for sport) 
=> 
(assert (recommend med_sport))) 

(defrule rule-5 

(budget ?x) 
(test (> ?x 500)) 
(use_for lifestyle) 
=> 
(assert (recommend high_lifestyle)))  


(defrule rule-6 

(budget ?x) 
(test (and (> ?x 300) (< ?x <500))) 
(use_for sport) 
=> 
(assert (recommend med_sport))) 

(defrule rule-7 

(budget ?x) 
(test (> ?x 500)) 
(use_for sport) 
=> 
(assert (recommend high_sport)))   


(defrule recommend-rule 
(recommend ?type) 
(bikelife (name ?x) (type ?type)) 
=> 
(printout t crlf "I recommend " ?x " for you." crlf crlf)) 
(defrule ask-1 
=> 
(printout t crlf "================================ ") 
(printout t crlf " testing testing testing. ") 
(printout t crlf "================================ " crlf crlf) 
(printout t "* How much are you going to spend on bike? ") 
(assert (budget (read))) 
(printout t "* what purpose? (lifestyle, sport)") 
(assert (use_for (read)))) 
(reset) 
(run) 

Ceci est mon code de Jess pour recommander des vélos. Je ne vois rien de mal dans le code. J'ai essayé des centaines de fois et est venu à Stack Overflow pour obtenir de l'aide dessus.Comment déboguer ce code Jess très simple?

Le code fonctionne comme j'obtiens la valeur de budget et l'évalue par 300, 500 et si la gamme de budget correspond je vérifie le but du vélo que l'utilisateur achète. Après cela, en utilisant des faits, je veux envoyer le message de recommandation. Comment puis-je résoudre ce problème?

+0

Corrigez vos fautes de frappe: 'tyle',' user_for'. – laune

+0

Ah .. C'était le problème .. désolé de poster une question stupide sur StackOverflow. Je pensais une fois si je mettais "test (

+0

Vous avez plus de fautes de frappe: med_ ou moyen? Et une règle en double pour "sport moyen". Et plusieurs '<500'. – laune

Répondre

0

Cela devrait plus ou moins fonctionner, sauf pour les fautes de frappe. Je vois un certain nombre d'entre eux, comme "tyle" au lieu de "type", "user_for" au lieu de "use_for", et un "<" avant la plupart des instances du nombre 500. Au moins la première de ces trois erreurs devrait être rapporté par Jess lorsque vous exécutez ce code.

La plupart de la documentation existante est disponible sur le site Web de Jess, www.jessrules.com. Il y a quelques vidéos YouTube si vous les recherchez, et il y a le livre "Jess in Action"; il est épuisé mais il n'est pas difficile de trouver des copies utilisées.

+0

Merci pour vos conseils avisés. Je travaillerais dur sur mes compétences. Je vais chercher les sites que vous avez mentionnés. J'ai utilisé plusieurs expressions identiques parce que je n'ai pas l'habitude de coder. –