مجموعة من الأمثله المحلولة
÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷-÷
domains
X=integer*
predicates
sum(X,X)
rev(X,X)
find(X,X,integer,X)
last(X,integer)
app(X,X,X)
mem(integer,X)
clauses
app([],L,L):-!.
app([H|L],L2,[H|L3]):-not(mem(H,L)),not(mem(H,L2)),!,app(L,L2,L3).
app([_|L],L2,L3):-app(L,L2,L3).
mem(X,[X|_]):-!.
mem(X,[_|L]):-mem(X,L).
rev([],[]):-!.
rev([H|L],R):-rev(L,R1),app(R1,[H],R).
sum([],[]):-!.
sum([H1,H2|L],[K|L1]):-H1+H2=K,sum(L,L1).
find(L,L1,K,L2):-sum(L,L1),last(L,K),rev(L1,L2).
last([X],X):-!.
last([_|T],X):-last(T,X).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
لأيجاد أكبر وأصغر عنصر في قائمة وطول قائمة وغيرها
domains
X=integer
L=integer*
predicates
length(L,X).
max(X,L).
min(X,L).
mul(X,X,X,X).
add1(L,L).
clauses
length([],0):-!.
length([_|T],L):-length(T,L1),L=L1+1.
max(M,[M]):-!.
max(M,[H1,H2|T]):-H1>=H2,max(M,[H1|T]).
max(M,[H1,H2|T]):-H2>H1,max(M,[H2|T]).
min(N,[N]):-!.
min(N,[H1,H2|T]):-H1<=H2,min(N,[H1|T]).
min(N,[H1,H2|T]):-H2<=H1,min(N,[H2|T]).
add1([H1|T1],[H2|T2]):-H2=H1+1,add1(T1,T2).
mul(L,M,N,R):-L mod 2=0,R=L*M.
run(L,M,N,T2,R,X):-length(X,L),max(M,X),min(N,X),add1(X,T2),mul(L,M,N ,R).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــ
لأيجاد مجموع العدد الفردي فقط
N=9
S=1+3+5+7+9
domains
X=integer.
predicates
sum(integer,integer).
clauses
sum(1,1).
sum(N,S):-N1=N-2,sum(N1,S1),S=N+S1.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــ
لقسمة مفكوك رقم على نفسه مرفوع للقوة
{B}
domains
x=integer.
z=real.
predicates
power(x,x,x).
fact(x,x).
div(x,x,z).
clauses
fact(0,1):-!.
power(_,0,1):-!.
fact(N,F):-N1=N-1,fact(N1,F1),F=N*F1.
power(X,Y,Z):-Y1=Y-1,power(X,Y1,Z1),Z=X*Z1.
div(A,B,Z):-fact(A,F),power(A,B,Z),Z=fact(A,F)/power(A,B,Z).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــ
لحذف عنصر من قائمة وحساب عدد مرات الحذف
domains
T=integer*.
X=integer.
predicates
del(X,T,T,X).
clauses
del(_,[],[],0):-!.
del(X,[X|T1],T2,B):-del(X,T1,T2,B1),B=B1+1.
del(X,[Y|T1],[Y|T2],B1):-del(X,T1,T2,B1),!.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــ
لتقسيم قائمة الى قائمتين
domains
x=integer*.
predicates
split(x,x,x).
clauses
split([],[],[]):-!.
split([H1,H2|T1],[H1|T2],[H2|T3]):-split(T1,T2,T3).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
{لطباعة نوع القيمة المدخلة ؟ {فردية أم زوجية
predicates
div1(integer,string)
clauses
div1(X,B):-X mod 2=0,B= even.
div1(X,B):-X mod 2<>0,B=odd.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
لأيجاد قائمة بالعناصر المشتركة بين قائمتين
domains
X=integer*.
L=integer.
predicates
mem(L,X).
inter(X,X,X).
clauses
mem(X,[X|_]):-!.
mem(X,[_|T]):-mem(X,T).
inter([],[],[]):-!.
inter([],_,[]):-!.
inter([H|T1],T2,T3):-not(mem(H,T2)),inter(T1,T2,T3).
inter([H|T1],T2,[H|T3]):-mem(H,T2),inter(T1,T2,T3).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
عمليتي الجمع والضرب
predicates
sum(integer,integer,integer)
mult(integer,integer,integer)
clauses
mult(X,Y,Z):-Z=X*Y.
sum(X,Y,Z):-Z=X+Y.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
domains
X=integer.
T=integer*.
predicates
prime1(X,X,X).
prime(T,T).
clauses
prime([],[]).
prime([H|T],[H|T1]):-prime1(H,H,N),N<=2,prime(T,T1).
prime([_|T],L1):-prime(T,L1).
prime1(_,1,1):-!.
prime1(X,H,N):-H1=H-1,X mod H=0,prime1(X,H1,N1),N=N1+1,!.
prime1(X,H,N):-H1=H-1,prime1(X,H1,N).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
لأعطاء قائمة بعناصر والحصول على قائمة هي عناصر الأولى مرفوعة للأس 2 ) تربيع)
domains
X=integer.
T=integer*.
predicates
seq(T,T).
clauses
seq([],[]).
seq([H1|T],[H2|T2]):-H1=H1,H2=H1*H1,seq(T,T2).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
domains
X=integer.
predicates
pow(X,X,X).
sum(X,X).
fact(X,X).
clauses
pow(_,0,1):-!.
pow(X,N,F):-N1=N-1,pow(X,N1,F1),F=X*F1.
fact(0,1).
fact(X,N):- X1=X-1, fact(X1,N1),N=N1*X.
sum(1,1).
sum(N,S):-N1=N-2,sum(N1,S1),S=N+S1.
sum(1,1):-!.
sum(X,Y):-X1=X-1,pow(X,2,F),sum(X1,Y1),Y=F+Y1.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــ
برناج الحذف
domains
T=integer*.
X=integer.
predicates
del1(X,T,T,X).
del2(X,T,T,X).
clauses
del1(X,[X|T1],T1,X):-!.
del1(X,[Y|T1],[Y|T2],A):-del1(X,T1,T2,A).
del2(X,[X|T1],T1,X):-!.
del2(X,[Y|T1],[Y|T4],B):-del2(X,T1,T4,B).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ
أول برناج بمادة برولوك
domains
predicates
edge(string,string)
tedge(string,string)
fedge(string,string)
vedge(string,string)
sedge(string,string)
clauses
edge(a,b).
edge(a,f).
edge(b,c).
edge(c,d).
edge(c,e).
edge(f,e).
edge(f,c).
edge(f,g).
edge(g,c).
edge(e,d).
tedge(X,Z):-edge(X,Y),edge(Y,Z).
fedge(X,W):-tedge(X,Y),edge(Y,W).
vedge(X,Z):-tedge(X,Y),tedge(Y,Z).
sedge(X,Z):-vedge(X,Y),edge(Y,Z).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــ
لأيجاد مجموع عناصر قائمة
domains
L=integer*
X=integer.
predicates
sum(L,integer).
clauses
sum([],0):-!.
sum([H|L],X):-sum(L,X1),X=H+X1.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــ
لأيجاد مفكوك(مضروب) أي رقم
domains
x=integer
y=integer
predicates
fact(x,x)
clauses
fact(0,1).
fact(X,N):- X1=X-1, fact(X1,N1),N=N1*X.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــ
يجمع عناصر قائمتين ويضع الناتج في قائمة ثالثة
SUM(L1,L2,L3)
بحيث
L1=[1,2,3],L2=[2,4,6],L3=[3,6,9]
domains
L=integer*.
X=integer.
predicates
sum(L,L,L).
length(L,X).
su(X,X).
clauses
sum([],[],[]):-!.
sum([H1|T1],[H2|T2],[H3|T3]):-H3=H1+H2,sum(T1,T2,T3).
length([],0):-!.
length(_,M):-length(_,M1),M=M1+1.
su(X,Y):-length(T1,X),length(T2,Y),X=Y,sum(T1,T2,_).
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــ
شجرة العائلة كاملة
predicates
married(string,string)
son(string,string)
grandfather(string,string)
grandmother(string,string)
aunt(string,string)
cousin(string,string)
uncle(string,string)
father(string,string)
mother(string,string)
brother(string,string)
sister(string,string)
male(string)
female(string)
clauses
married(abbas,lora).
married(ali,sara).
married(kamal,solaf).
male(abbas).
male(ahmed).
male(khalid).
male(ali).
male(kamal).
male(bassem).
female(lora).
female(suha).
female(sara).
female(solaf).
son(ali,abbas).
son(ali,lora).
son(suha,abbas).
son(suha,lora).
son(kamal,abbas).
son(kamal,lora).
son(ahmed,ali).
son(ahmed,sara).
son(khalid,ali).
son(khalid,sara).
son(bassem,kamal).
son(bassem,solaf).
father(Y,Z):-married(Y,_),son(Z,Y).
uncle(X,Z):-son(X,Y),brother(Z,Y).
mother(X,Y):-married(_,X),son(Y,X).
aunt(X,W):-son(X,Y),sister(W,Y).
brother(X,Y):-father(Z,X),father(Z,Y),male(X),male(Y),X<>Y.
sister(X,Y):-father(Z,X),father(Z,Y),female(X),X<>Y.
grandfather(X,Y):-son(X,Z),son(Z,Y),male(Y).
grandmother(X,Z):-son(X,Y),son(Y,Z),female(Z).
cousin(X,Y):-uncle(X,Z),son(Y,Z).
,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘, ,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘ ,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘,‘