2016-12-05 3 views
0

J'essaie de créer un système expert de diagnostic. J'ai réussi à créer le menu et le sous-menu mais après avoir entré mon choix (par exemple 1). La question qui doit être posée après le sous-menu n'apparaît pas. D'où le fait de ne pas pouvoir continuer. Je voudrais demander s'il y a quelque chose de mal dans ce que j'ai fait? S'il y a, quelle est la bonne façon de le faire?CLIPS: Impossible de continuer après avoir entré le choix

est ici une partie du code de référence:

CLIPS> ;; MainMenu 
    (defrule Menu 
    (not (iffoundChoice ?)) 
=> 
    (printout t crlf crlf crlf 
    "Choose one of the problem areas listed below" crlf crlf 
    " 1.) Brake Pedal System. "crlf crlf 
    " 2.) Gearbox. "crlf crlf 
    " 3.)  ." crlf crlf 
    " 4.) END SYSTEM. "crlf crlf crlf 
    " Enter no. of your choice: ") 
    (assert (iffoundChoice (read)))) 

CLIPS> ;; submenu1 
(defrule subMenu1 
    (not (iffoundChoice1 ?)) 
    => 
    (printout t crlf crlf crlf 
    "Choose which topic best relates to your problem? "crlf crlf 
    " 1.1) Car Pulls One Side When Braking. "crlf crlf 
    " 1.2) Rear Brake Drag. "crlf crlf 
    " 1.3) Brake squeal. "crlf crlf 
    " 4.) END SYSTEM. "crlf crlf crlf 
    " Enter no. of your choice: ") 
    (assert (iffoundChoice1 (read)))) 

    CLIPS> ;; Rule 1 based on choice 1 

(defrule car_pulls_one_side_when_braking 

    (iffoundChoice1) 
    ?retractCh1 <- (iffoundChoice1) 
    (not (ifYesNochoice ?)) 
    => 
    (retract ?retractCh1) 
    (printout t crlf crlf crlf 
    " Was your tyre uneven? (yes|no) "crlf crlf 
    " Your answer: ") 
    (assert (ifYesNochoice (read)))) 

    CLIPS> ;;Rule 2 based on Yes answer in Rule 1 

    (defrule car_pulls_one_side_when_braking1 

    (ifYesNochoice yes) 
    ?retractChy <- (ifYesNochoice yes) 
    (not (ifYesNochoice1 ?)) 
    => 
    (retract ?retractChy) 
    (printout t crlf crlf crlf 
    " Please check your tyre pressure "crlf crlf 
    " Is it in good condition? (yes|no) "crlf crlf 
    " Your answer: " 
    (assert (ifYesNochoice1 (read))))) 

    CLIPS> ;;Rule 3 based on Yes answer in Rule 2 

    (defrule car_pulls_one_side_when_braking2 

    (ifYesNochoice1 yes) 
    ?retract <- (ifYesNochoice1) 
    (not (ifYesNochoise2 ?)) 
    => 
    (retract ?retract Chy) 
    (printout t crlf crlf crlf 
    " Then your car should be no problem. " crlf crlf 
    " Thanks for using Vehicle Diagnosis Failure System. " crlf crlf)) 

    CLIPS> ;; Rule 4 based on NO answer in Rule 2 

    (defrule car_pulls_one_side_when_braking3 

    (ifYesNochoice1 no) 
    ?retract <- (ifYesNochoice1) 
    (not (ifYesNochoice3 ?)) 
    => 
    (retract ?retract Chy) 
    (printout t crlf crlf crlf 
    " Please inflate all the tyres according to the tyre plycard. "crlf crlf 
    " Please check again with your technician if problem is solved. "crlf crlf 
    " Thanks for using Vehicle Diagnosis Failure System. "crlf crlf)) 

    CLIPS> (reset) 

    CLIPS> (run) 

Répondre

0

Modification des motifs pour iffoundChoice et iffoundChoice1 pour inclure la sélection de l'utilisateur.

(defrule car_pulls_one_side_when_braking 
    (iffoundChoice 1)     ; <-- 
    ?retractCh1 <- (iffoundChoice1 1) ; <-- 
    (not (ifYesNochoice ?)) 
    => 
    (retract ?retractCh1) 
    (printout t crlf crlf crlf 
    " Was your tyre uneven? (yes|no) "crlf crlf 
    " Your answer: ") 
    (assert (ifYesNochoice (read)))) 
+0

Salut, désolé pour la réponse tardive, j'ai réussi à le faire fonctionner à l'aide en faisant référence à un autre lien similaire à la mienne [lien] (http://stackoverflow.com/questions/34110980/expert-system-clips -code-return-false-value). mais malheureusement il y a un hoquet mineur dans un code postérieur que j'ai fait que je posterai dans un autre post. Mais merci beaucoup pour l'aide! :) – Isaac