1

現在、いくつかの PROLOG の演習を行っています。これはまったく初めてのことなので、ご容赦ください。次の知識ベースがあります。

/* The structure of a subject teaching team takes the form:
team(Subject, Leader, Non_management_staff, Deputy).
Non_management_staff is a (possibly empty) list of teacher
structures and excludes the teacher structures for Leader and
Deputy.
teacher structures take the form:
teacher(Surname, Initial,
profile(Years_teaching,Second_subject,Club_supervision)).
Assume that each teacher has his or her team's Subject as their
main subject. */

team(computer_science,teacher(may,j,profile(20,ict,model_railways)),
[teacher(clarke,j,profile(32,ict,car_maintenance))],
teacher(hamm,p,profile(11,ict,science_club))).

team(maths,teacher(vorderly,c,profile(25,computer_science,chess)),
[teacher(o_connell,d,profile(10,music,orchestra)),
teacher(brankin,p,profile(20,home_economics,cookery_club))],
teacher(lynas,d,profile(10,pe,football))).

team(english,teacher(brewster,f,profile(30,french,french_society)),
[ ],
teacher(flaxman,j,profile(35,drama,debating_society))).

team(art,teacher(lawless,m,profile(20,english,film_club)),
[teacher(walker,k,profile(25,english,debating_society)),
teacher(brankin,i,profile(20,home_economics,writing)),
teacher(boyson,r,profile(30,english,writing))],
teacher(carthy,m,profile(20,music,orchestra))).

subject(X):- team(X,_,_,_).
leader(X) :- team(_,X,_,_).
deputy(X) :- team(_,_,_,X).

non_management(X) :-
    team(_,_,Non_management,_),
    member(X,Non_management).

exists(X) :-
    subject(X);  
    leader(X);
    deputy(X);
    non_management(X).

ここで、(q) 教師 A と教師 B のイニシャルを作成する必要があります。ここで、教師 A と教師 B は異なる教科チームに所属し、それぞれが 2 番目の教科として家庭科を持ち、姓はブランキンです。

ナレッジ ベース内のすべてのエンティティを比較する方法に行き詰まっています。これまでは、単一のエンティティ (この例の場合、単一の教師) からのみ値を抽出していました。例えば:

question1(Initial,Surname) :-
    exists(teacher(Surname,Initial,profile(_,english,_))).

どんな助けでも大歓迎です。

4

1 に答える 1

0

ナレッジベース内のすべてのエンティティを明示的に比較する必要はありません。これは、Prologがクエリに応答する方法で、単純であろうと複雑であろうと暗黙的です。最初のいくつかの基準については、あなたはただ言うことができます

team(W,X,Y,Z), team(J,K,L,I), W \= J.

これにより、バックトラックを介してさまざまなチームのすべての可能な組み合わせが得られます。次のようなものでクエリを拡張できます

member(A,Y), member(B,L), A=teacher(...), B=teacher(...)

他の基準を処理します。

于 2012-05-18T07:57:38.687 に答える