3

私は次の一連の事実を持っています:

lc('Dr. Smith', 'Algorithms').
lc('Dr. Jones', 'Models & Analysis').
lc('Dr. Smith', 'Operating Systems').
lc('Dr. Jones', 'Artificial Intelligence').
lc('Dr. Smith', 'Models of Computation').
lc('Dr. Smith', 'Discrete Math').
lc('Dr. Jones', 'Information Retrieval').
lc('Dr. Jones', 'Computer Vision').

ctl('Algorithms', 'MWF, 9:00 - 11:00 a.m.', 'McB 209').
ctl('Models & Analysis', 'MWF, 9:00 - 11:00 a.m.', 'McB 211').
ctl('Operating Systems', 'TTH, 9:00 - 11:00 a.m.', 'McB 306').
ctl('Artificial Intelligence', 'TTH, 3:00 - 5:00 p.m.', 'McB 311').
ctl('Models of Computation', 'TTH, 11:00 - 1:00 p.m.', 'McB 204').
ctl('Discrete Math', 'TTH, 3:00 - 5:00 p.m.', 'McB 204').
ctl('Information Retrieval', 'MWF, 3:00 - 5:00 p.m.', 'McB 205').
ctl('Computer Vision', 'MWF, 1:00 - 3:00 p.m.', 'NEB 2182').

そして、私は次のように書くことができました、それは私に講師のスケジュールを与えます:

schedule(Lecturer, X, Y, Z) :- ctl(X, Y, Z), lc(Lecturer, X).

しかし今、私はジョーンズ博士とスミス博士が同時に教える時期を見つけるためのルールを書こうとしています。何か案は?

4

2 に答える 2

1

次のようにして、独自の関数を使用してこのユーティリティを拡張できます。

same_time(X, Y, R) :-
    schedule(X, _, B, _),
    schedule(Y, _, B, _),
    X \= Y,
    R = B.

これは、リストに返されるように、教師Xと教師Yの両方を同時に教えているだけです。BR

また、授業スケジュールで複数の教師が同時に発生する時間のみが必要な場合は、次のように、最初の varsXと を削除し、最終結果自体にY置き換えることもできます。R

same_time(B) :-
    schedule(X, _, B, _),
    schedule(Y, _, B, _),
    X \= Y.

帰りはB、複数の先生が授業を行う時間帯となります。

競合については、ステートメントの機能している部分を保持し、単純に次のように拡張できます。

same_teachertime(X) :-
    schedule(X, V1, B, _),
    schedule(X, V2, B, _),
    V1 \= V2.

schedulingconflict(X, Y, X):- ctl(X, A, B), ctl(Y, A, B), X \= Y.
schedulingconflict(_, _, X):- same_teachertime(X).

これは、同じ教師であること、同時に異なる科目を教えることは対立であると考えています。なぜなら、部屋の対立はあなたが書いた声明で解決されているからです。

よろしく!

于 2012-12-07T22:00:01.467 に答える
-1

_そんな感じ:

samehours(Prof1,Prof2,H) :-
   Prof1 \= Prof2,
   lc(Prof1, Sub1), lc(Prof2,Sub2),
   ctl(Sub1,H,_), ctl(Sub2, H, _).

結果:

H = 'MWF, 9:00 - 11:00 a.m.' ;
H = 'TTH, 3:00 - 5:00 p.m.' ;
于 2012-12-07T21:55:57.840 に答える