Подборка лаб выполненых в Arity Prologе / ARI_DOC / DOSTOV
.DOCПрограмма определения живности с показателями достоверности
vesh('Кошка',D):-przn('Любит воду',D1),
przn('Быстро бегает',D2),
przn('Любит рыбу',D3),
przn('Любит свободу',D4),
dost([D1,D2,D3,D4],[0.1,0.5,0.9,0.5],0.9,D).
vesh('Собака',D):- przn('Любит воду',D1),
przn('Быстро бегает',D2),
przn('Любит рыбу',D3),
przn('Любит свободу',D4),
dost([D1,D2,D3,D4],[0.5,0.9,0.3,0.3],0.9,D).
vesh('Утка',D):- przn('Любит воду',D1),
przn('Быстро бегает',D2),
przn('Любит рыбу',D3),
przn('Любит свободу',D4),
dost([D1,D2,D3,D4],[0.9,0.1,0.8,0.9],0.9,D).
vesh('Мышь',D):- przn('Любит воду',D1),
przn('Быстро бегает',D2),
przn('Любит рыбу',D3),
przn('Любит свободу',D4),
dost([D1,D2,D3,D4],[0.1,0.4,0.1,0.9],0.8,D).
przn(X,D):-xprzn(X,D),!.
przn(X,D):-write('Насколько достоверно, что - '),tab(2),write(X),
tab(2),read(D),assert(xprzn(X,D)).
dost(Sp1,Sp2,K,D):-vagnst(Sp1,Sp2,Sp3),min(Sp3,Min),D is Min*K.
vagnst([X|X2],[Y|Y2],[Z|Z2]):-Z is (1-X*(1-Y)),vagnst(X2,Y2,Z2).
vagnst([],[],[]).
min([],1).
min([X|X2],Min):-min(X2,Min2),
((X < Min2,Min is X);(not(X < Min2),Min is Min2)).
go:-assert(name([])),assert(dost([])),call(vesh(Name,D)),
retract(name(Names)),assert(name([Name|Names])),
retract(dost(Dosts)),assert(dost([D|Dosts])),fail.
go:-retract(name(Names)),tab(2),retract(dost(Dosts)),max(Dosts,D,N),
getname(Names,Name,N),write('Это '),tab(2),write(Name),tab(2),
write('с достоверностью'),tab(2),write(D),write('.'),clearbase.
max(L,Dmax,N):-getmax(L,Dmax,N,1).
getmax([],0,0,Num).
getmax([X|X2],Max,N,Number):-Num2 is Number+1,getmax(X2,Max2,N2,Num2),
((X>Max2,Max is X,N is Number);(not(X>Max2),Max is Max2,N is N2)).
getname(L,Res,N):-assert(schet(1)),find(L,Res,N).
find([X|X2],Res,N):-retract(schet(S)),S2 is S+1,
(((S=N),Res=X);(assert(schet(S2)),find(X2,Res,N))).
clearbase:-retractall(xprzn(_,_)).
retractall(X):-repeat,not(retract(X)).
Примеры:
?- go.
Насколько достоверно, что - Любит воду 0.9.
Насколько достоверно, что - Быстро бегает 0.1.
Насколько достоверно, что - Любит рыбу 0.9.
Насколько достоверно, что - Любит свободу 0.9.
Это Утка с достоверностью 0.738.
yes
?- go.
Насколько достоверно, что - Любит воду 0.5.
Насколько достоверно, что - Быстро бегает 0.9.
Насколько достоверно, что - Любит рыбу 0.3.
Насколько достоверно, что - Любит свободу 0.2.
Это Собака с достоверностью 0.675.
yes