predicates
mush(string)
shena(string)
roditel(string, string)
ded(string, string)
baba(string, string)
clauses
mush(«Sergej»).
mush(«Dmitrij»).
mush(«Valera»).
mush(«Petr»).
mush(«Mihail»).
mush(«Nikolaj»).
mush(«Alex»).
mush(«Alexandr»).
mush(«Kostja»).
shena(«Barbara»).
shena(«Anna»).
shena(«Tatiana»).
shena(«Liza»).
shena(«Katja»).
shena(«Julja»).
shena(«Raisa»).
shena(«L’uda»).
roditel(«Barbara», «Liza»).
roditel(«Liza», «Alex»).
roditel(«Alex», «Kostja»).
roditel(«Anna», «Katja»).
roditel(«Anna», «Petr»).
roditel(«Sergej», «?рЄ «).
roditel(«Sergej», «??ЄЁ»).
roditel(«Katja», «?ы «).
roditel(«Petr», «Alex»).
roditel(«Petr», «Alexandr»).
roditel(«Alexandr», «L’uda»).
roditel(«Julja», «L’uda»).
roditel(«Tatiana», «Mihail»).
roditel(«Dmitrij», «Mihail»).
roditel(«Mihail», «Julja»).
roditel(«Valera», «Nikolaj»).
roditel(«Nikolaj», «Raisa»).
roditel(«Raisa», «Kostja»).
roditel(«Liza», «Alexandr»).
ded(A,C) :-
roditel(A, B),
roditel(B, C),
shena(A).
baba(A, C) :-
roditel(A, B),
roditel(B, C),
shena(A).
goal
ded(A, C),
write(A, » — dedushka «, C, » >> «) or
baba(A, C),
write(A, » babushka «, C, » >> «).
predicates
mush(string)
shena(string)
roditel(string, string)
nevestka(string, string)
z’at'(string, string)
suprug(string, string)
clauses
mush(«Sergej»).
mush(«Dmitrij»).
mush(«Valera»).
mush(«Petr»).
mush(«Mihail»).
mush(«Nikolaj»).
mush(«Alex»).
mush(«Alexandr»).
mush(«Kostja»).
shena(«Barbara»).
shena(«Anna»).
shena(«Tatiana»).
shena(«Liza»).
shena(«Katja»).
shena(«Julja»).
shena(«Raisa»).
shena(«L’uda»).
suprug(«Anna», «Sergej»).
suprug(«Sergej», «Anna»).
suprug(«Tatiana», «Dmitrij»).
suprug(«Dmitrij», «Tatiana»).
suprug(«Liza», «Petr»).
suprug(«Petr», «Liza»).
suprug(«Katja», «Mihail»).
suprug(«Mihail», «Katja»).
suprug(«Alex», «Raisa»).
suprug(«Raisa», «?ыхъё»).
suprug(«Alexandr», «Julja»).
suprug(«Julja», «Alexandr»).
roditel(«Barbara», «Liza»).
roditel(«Liza», «Alex»).
roditel(«Alex», «Kostja»).
roditel(«Anna», «Katja»).
roditel(«Anna», «Petr»).
roditel(«Sergej», «Katja»).
roditel(«Sergej», «Petr»).
roditel(«Katja», «Julja»).
roditel(«Petr», «Alex»).
roditel(«Petr», «Alexandr»).
roditel(«Alexandr», «L’uda»).
roditel(«Julja», «L’uda»).
roditel(«Tatiana», «Mihail»).
roditel(«Dmitrij», «Mihail»).
roditel(«Mihail», «Julja»).
roditel(«Valera», «Nikolaj»).
roditel(«Nikolaj», «Raisa»).
roditel(«Raisa», «Kostja»).
roditel(«Liza», «Alexandr»).
nevestka(A, B) :-
suprug(A, C),
roditel(B, C),
shena(A),
C <> B.
nevestka(A, B) :-
suprug(A, C),
roditel(D, C),
roditel(D, B),
roditel(E, C),
roditel(E, B),
D <> E,
shena(D),
mush(E),
shena(A),
C <> B.
nevestka(A, B) :-
suprug(A, C),
roditel(D, C),
roditel(D, F),
roditel(E, C),
roditel(E, F),
D <> E,
shena(D),
mush(E),
shena(A),
C <> F,
suprug(F, B).
z’at'(A, B) :-
suprug(A, C),
roditel(B, C),
mush(A),
C <> B.
z’at'(A, B) :-
suprug(A, C),
roditel(D, C),
roditel(D, B),
roditel(E, C),
roditel(E, B),
D <> E,
shena(D),
mush(E),
mush(A),
C <> B.
z’at'(A, B) :-
suprug(A, C),
roditel(D, C),
roditel(D, F),
roditel(E, C),
roditel(E, F),
D <> E,
shena(D),
mush(E),
mush(A),
C <> F,
suprug(F, B).
goal
nevestka(A, B),
write (A, » nevestka», B, » «) or
z’at'(A, B),
write (A, » z’at'», B, » «).
predicates
chto_gde_leshit(symbol,symbol,symbol,symbol)
sosud(symbol)
clauses
sosud(butlka).
sosud(stakan).
sosud(kuvchin).
sosud(banka).
chto_gde_leshit(I,T,K,E):-
sosud(I),
sosud(T),
sosud(K),
sosud(E),
I<>T,
I<>K,
I<>E,
T<>K,
T<>E,
K<>E,
not(I=butlka),
not(E=butlka),
not(T=kuvchin),
not(T=banka),
not(E=banka),
not(I=stakan),
not(I=banka).
goal
chto_gde_leshit(Moloko,Limonad,Kvas,Voda).
%1) Znaet li Sergej Borisa?
DOMAINS
name, addr = string
/*
predicates
d (symbol).
n (symbol).
sap(symbol).
l().
clauses
d(maria).
n(sergei).
n(boris).
n(valentin).
sap(maria).
sap(sergei).
sap(boris).
sap(valentin).
l():- sap(X),X=»boris»,
sap(Y),Y=»sergei»,
n(X),
n(Y),
true.
l():- sap(X),X=»boris»,
sap(Y),Y=»sergei»,
d(X),
d(Y),
true.
goal
write(«sergei znaet borisa — «),
l().
*/
%2) Kogo znaet Valentina?
/*
predicates
d (symbol).
n (symbol).
sap(symbol).
l().
clauses
d(maria).
n(sergei).
n(boris).
n(valentin).
sap(maria).
sap(sergei).
sap(boris).
sap(valentin).
l():- sap(X),X=»valentin»,
d(X),d(Y),Y<>X,
write(Y,»\n»),
fail.
l():- sap(X),X=»valentin»,
n(X),n(Y),Y<>X,
write(Y,»\n»),
fail.
goal
l().
*/
%3) Kogo znaet Marija?
/*
predicates
d (symbol).
n (symbol).
sap(symbol).
l().
clauses
d(maria).
n(sergei).
n(boris).
n(valentin).
sap(maria).
sap(sergei).
sap(boris).
sap(valentin).
l():- sap(X),X=»maria»,
d(X),d(Y),Y<>X,
write(Y,»\n»),
fail.
l():- sap(X),X=»maria»,
n(X),n(Y),Y<>X,
write(Y,»\n»),
fail.
goal
write(«\n»),
l().
*/
%4) Kto ne znakom drug s drugom?
/*
predicates
d (symbol).
n (symbol).
sap(symbol).
l().
clauses
d(maria).
n(sergei).
n(boris).
n(valentin).
sap(maria).
sap(sergei).
sap(boris).
sap(valentin).
l():- sap(X), sap(Y),
d(X),n(Y),
write(Y,» — «,X,»\n»),
fail.
goal
l().*/
%recursivno
/*
predicates
func(real, real)
clauses
func(1, 0.84147) :- !.
func(X, SumX) :-
Y = X-1,
func (Y, SumY),
SumX = (1+sin(X))*SumY.
GOAl:
write(«Enter a number.\n»),
readreal(X),
func (X, SumX).
*/
% iterativno
predicates
func(real, real)
func(real, real, real, real)
clauses
func(N, SumN) :-
func(N, SumN, 1, 0.84147).
% func(N, SumN, N, SumN) :- !.
func(N, SumN, I, P) :-
NewI = I+1,
NewP = P*(1+sin(NewI)),
func(N, SumN, NewI, NewP).
GOAL: write(«Enter a number.\n»), readreal(X),
func (X, SumX).
%S=1!+2!+3!+4!+…+n! (n>1) Rekyrsivnii
predicates
f(integer, integer)
sum(integer,integer)
clauses
f(1, 1) :- !.
f(FactX,X) :-
Y=X-1,
f(FactY, Y),
FactX = X*FactY.
sum(1, 1) :- !.
sum(N,S):-
NewN=N-1,
sum(NewN,NewS),
f(L,N),
S=L+NewS.
goal
N=3,
sum(N, S).
/*%S=1!+2!+3!+4!+…+n! (n>1) Iteracionnii
predicates
f(real, real)
f(unsigned, long, unsigned, long)
sum(integer,real)
sum(integer,real,integer,real)
clauses
f(N, FactN) :-
f(N, FactN, 1, 1).
f(N, FactN, N, FactN) :- !.
f(N, FactN, I, P) :-
NewI = I+1,
NewP = P*NewI,
f(N, FactN, NewI, NewP).
sum(N,Sum):-sum(N,Sum,1,1).
sum(N,Sum,N,Sum):-!.
sum(N,Sum,L,S):-
L1=L+1,
f(L1,P),
NewS=S+P,
sum(N,Sum,L1,NewS).
goal
X=3,
sum(X, FX).
*/