2012-05-17 5 views
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). 

Теперь я должен написать правило, которое (д) инициалы преподавателя А и учителя В, где учитель А и учитель B находятся в различных предметных команд, у каждого есть домоводство как их второй предмет , и каждый из них имеет фамилию Бранкин.

Я зациклился на том, как сравнить все сущности в базе знаний. До этого я только извлекал значения из отдельных объектов (в случае этого примера - одиночные учителя). Например:

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

Любая помощь очень ценится.

ответ

0

Вам не нужно явно сравнивать все сущности в базе знаний - это неявно в том, как Prolog отвечает на запросы, являются ли они простыми или сложными. В течение первых нескольких критериев, вы можете просто сказать

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

и что поможет вам все возможные комбинации различных команд с помощью возвратов. Вы можете расширить запрос примерно на

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

для обработки других критериев.

Смежные вопросы