2016-04-09 18 views
0

は、だから私は、私は私が次DeftemplateとDeffactsを持ってJESSのパターン結合技術?

(or (and (course ?course) (sched ?sched)) 
    (and (course ?course1) (sched ?sched1))) 

のような結合制約を使用できると思っていた擬似コード

IF ?subject in ?course with ?schedule is still available 
    OR 
IF ?subject in ?course2 with ?schedule2 is still available 
THEN assert ?subject 

にこのように書きルールを作りたかったのです。

(deftemplate subject-information 
    (slot name) 
    (slot course) 
    (slot prerequisite) 
    (multislot sem-offered) 
    (slot priority-lvl) 
    (slot units) 
    (slot section) 
    (slot schedule) 
    (slot day)) 



(deffacts subject-info 
(subject-information 
     (name CS222) 
     (course BSIT) 
     (prerequisite Math101) 
     (prerequisite2 CS111) 
     (sem-offered 2) 
     (priority-lvl 3) 
     (units 4) 
     (section C) 
     (schedule 1330-1455) 
     (day MW) 
     (add-day TTH)) 

(subject-information 
     (name CS222) 
     (pre-requisites CS111) 
     (pre-requisites2 Math101) 
     (course BSCS) 
     (sem-offered 2 3) 
     (priority-lvl 3) 
     (units 4) 
     (section A) 
     (schedule 1200-1325) 
     (day MW))) 

私は異なるコースの異なるセクションを持つSAME対象の2つのデファクトを持っています。私はコースBSCSの学生がいる、私が欲しいのは、BSCSのスケジュールに合ったクラスを見つけるプログラムだが、見つからなければ。それは行くと別のクラスのスケジュールを確認します。

+0

ワーキングメモリのファクトに一致する値(件名?)はありません.Jessコードスニペットはテンプレート名を参照していないので意味がありません。おそらく、あなたの問題を示すためにあなたの質問を編集する:deftemplateと、一致するか一致しない事実。 – laune

+0

私は既に私のdeftemplateとdeffactsを追加しました。 –

答えて

0

「または」が必要な場所が表示されません。 1つのパターンでBSCSコースイベントを特定し、スケジュールをバインドし、受講可能性をテストするために生徒パターンを使用します。

(subject-information {course == "BSCS"} 
        (schedule ?sched)) 
(student-information (free-schedule $? ?sched $?)) 

だから、僕は学生の情報がフリースケジュールのリストを提供することを想定しています。 - あなたのデータにスケジュールが保存される方法は、人間の読者にとっては正しいかもしれませんが、コンピューティング・マッチにはあまり適していません。多分、毎日のクラス時間が一定であるかもしれませんが、あるスロットで一致する日であっても、別のスロットで時間が合っていても不便です。開始時刻と終了時刻が何でもかまいませんが、パターンhhmm-hhmmに一致する文字列(!)をチェックすると、他の文字列(!)には関数が必要です。

+0

私は既にスケジュールを把握しています。私は各タイムスロットのためのdeffactを持っています。プログラムがBSCSクラスのスケジュールを最初にチェックし、次にBSIT用に提供されたクラスをチェックする必要があります。私は顕著なレベルを使用したくないです。それは、他の同様のルールで顕著なレベルを実装する必要があるからです。 –

+0

情報がないために助言することは不可能です。例:BSCS-BSITは、最初のものを選ぶべき唯一のペアですか? BSAA、BSABなどの第3、第4、...レベルの優先度を持つことは可能ですか?これらのレベルはコース名のみに依存しますか?つまり、BSCSはBSIT(学生/学期にかかわらず、名前に関係なく)に常に「拍手」しますか?一般的な解決策は、時間ごとにすべてのマッチを見つけ、それらをファクトとして挿入し、BSxxに従ってベストを見つける。 – laune

+0

実際には生徒によって異なります。学生が受けなければならないクラスのリストはありますが、失敗したいくつかの科目のために、彼はその科目を取り戻す必要があります。もちろん、生徒のコースに提供されているクラスのスケジュールを最初に確認しなければならず、それが利用できないと分かったら、別のコースのクラスをチェックします。 –