48
pol(ivan, m).
sisters (X, Y):-dsisters(X, Y).
sisters (X, Y):- parents (Z, X), parents (Z,Y),pol(X,w),
pol(Y,w),not(X=Y),not(dsisters(X,Y)),
asserta(dsisters(X, Y)).
brothers (X ,Y):-dbrothers(X, Y).
brothers (X, Y):- parents (Z,X), parents l(Z,Y),pol(X,m),
pol(Y,m),not(X=Y),not(dbrothers(X,Y)),
asserta(dbrothers(X,Y)).
goal
sisters (X, Y), save (“mybase.txt”).
Пример 51: Для базы данных, содержащей сведения о книгах из личной
библиотеки, создадим внутреннюю базу данных, куда будем записывать
результаты запросов:
domains
collector, title, author, publisher = symbol
year = integer
personal_library = book (title, author, publisher, year)
predicates
collection (collector, personal_library)
q1(collector, title, year)
q2(year)
facts
dq1(collector, title, year)
count(year,byte)
clauses
collection (irina, book («Using Turbo Prolog», «Yin with Solomon»,
«Moscow, World», 1993)).
collection (irina, book («The art of Prolog», «Sterling with Shapiro»,
»Moscow, World», 1990)).
collection (petr, book («The art of Prolog», «Sterling with Shapiro»,
»Moscow, World», 1990)).
collection (petr, book («Prolog: a relation language and its applications»,
«John Malpas», »Moscow, Science», 1990)).
collection (anna, book («Prolog: a relation language and its applications»,
«John Malpas», »Moscow, Science», 1990)).
q1(C,T,Y):-dq1(C,T,Y), write(;*’,C,’ ‘,T,’ ‘,Y),nl, fail.
q1(C,T,Y):- not(dq1(C,T,_)),collection (C, book( T,_, _, 1990)),
assert(dq1(C,T,Y)), write(C,’ ‘,T,’ ‘,Y),nl.
count(2100,0).
q2(Y):-collection (_, book(_, _, _, Y)), count(Yold,Nold), N=Nold+1,
assert(count(Y,N)), write(Y,’ ‘,N),nl, fail.
goal
%q1(C,T,1990).