2016-03-22 11 views
0

私はJESSを初めて使用しています。私は生徒のID番号を尋ねるプログラムを持っており、プログラムは生徒の科目を取得します。JESSでルールが有効になりますが、起動しません。

事は、彼/彼女が他の学生の科目を取得したい場合、プログラムは、ユーザーに尋ねる手順の最後です。

ユーザが入力に別の学生を希望する場合、それは反撃最初のルールに移動しますが、私が試したときのルールにのみ有効にして起動しませんでした、ということ。

何が問題なのですか?私はコースがあることを確かめた。

ここに私のコードです。相選択し、学生が

(defrule student-select 
    (phase choose-student) 
    => 
    (printout t "Input Student ID: ") 
    (assert (lookupID (id (read))))) 

ルール学生セレクトアサートされたときに

(defrule check-subject 
    ?a <- (phase check-back) 
    ?stud <- (lookupID (id ?id)) 
    (student-information (id-number ?id) 
         (course ?course) 
         (subjects-taken $?taken) 
         (year ?year) 
         (semester ?sem)) 
    (prospectus-information (curriculum-name ?course) 
          (1st-year-1st-sem-subjects $?subjects1)) 
    => 
    (printout t "Student took: " (intersection$ $?taken $?subjects1) crlf) 
    (printout t "Student flunked: " (complement$ $?taken $?subjects1) crlf) 
    (assert (back-subject (complement$ $?taken $?subjects1))) 
    (retract ?a ?stud) 
    (ask)) 

そして、私は機能を持っているが

(deffunction ask() 
    (printout t "Consult another? (y/n) ") 
    (if (eq (read) y) 
    then (assert (phase choose-student)))) 

そして、私のDEFRULEを頼む、活性化したが発射したことがありません。私のプログラムはそこで止まります。

+0

問題はジェスコードの間違いです。これは、関連するコードを見ることができる人によって発見され、修正される可能性があります。 – laune

+0

投稿を編集しました。私を助けてください。ありがとうございました。 –

+0

*使用できる場合は*受け入れる*ことを確認してください。 「ありがとう」というコメントを書く必要はありません。 – laune

答えて

0

ルールとは別のアプリケーションのコントロール部分を記述することをお勧めします。しばらく機能で

(deffunction ask() 
    (printout t "Consult another? (y/n) ") 
    (if (eq (read) y) then 
    (printout t "Input Student ID: ") 
    (assert (lookupID (id (read)))) 
    (return TRUE) 
    else 
    (return FALSE))) 

これを使用して:

(while (ask) do (run)) 

そして、あなたは任意のより多くの(phase choose-student)を必要としません。

+0

私はjessのサンプルコードを基にして、sticks.clpをプログラムしますが、ユーザが再起動したい場合は、そのユーザを尋ねます。私の問題は本当に私のルールはただ起動し、決して発火しないということです。それはそこで止まる。 –

+0

私はあなたの提案されたコードを使ってみましたが、学生IDを入力すると、データベースに存在するかどうかを確認できませんでしたが、あなたのコードが私に啓示されました。私はask関数の中に(実行)を置き、student-selectルールが起動しました。ありがとうございました! –

+0

あなたが私の提案に正確に従うかどうかは、 "あなたにチェックさせる"でしょう。私はルールから '(位相チェックバック)'を省略していないと思う。 – laune

関連する問題