Professional Documents
Culture Documents
ي اﻟﺬكﺎء
اﻟﺨﺒ�ة ) (1484
ي
ف
اﻟ�ﻣﺠﺔ ي�
اﻟﻮﺣﺪة اﻟﺨﺎﻣﺴﺔ :ب
اﻟ�وﻟ�ج
ﻟﻐﺔ ب
Prolog اﻋﺪاد :أ.د .ﻳﻮﺳﻒ اﺑﻮزر
ﺟﺎﻣﻌﺔ اﻟﻘﺪس اﻟﻤﻔﺘﻮﺣﺔ
ف
اﻟﺼ��) (1193 ا�
2020 ي اﻟﻔﺼﻞ اﻟﺪر ي
Link to prolog
• Download:
https://www.swi-prolog.org/download/stable/bin/swipl-8.2.1-1.x64.exe.envelope
elephant(george).
Predicates Clauses elephant(forge).
elephant(X) :- grey(X), mammal(X), hasTrunk(X).
Rule and
then 3
Prolog - An Example
ﯾﺗﻛون اﻟﺑرﻧﺎﻣﺞ ﻣن ﺣﻘﺎﺋﻖ واﺳﺗﻔﺳﺎرات
mortal(X) :- person(X).
These are facts اﻟﺤﻘﺎﺋﻖ
person(saleh). (a particular type of clause)
?- mortal(saleh).
These are queries اﻻﺳﺘﻔﺴﺎرات
yes (and replies to the queries)
?- mortal(X).
X = saleh.
4
اﻟﻌﻣﻠﻲ GNU-Prolog
• ﻧﺷﻐل اﻟﺑرﻧﺎﻣﺞ gprolog
• ﺗظﮭر ﻟﻧﺎ اﻟﺷﺎﺷﺔ اﻟﺗﺎﻟﯾﺔ
5
اﻟﻌﻣﻠﻲ
ﻛﺗﺎﺑﺔ اﻟﺑرﻧﺎﻣﺞ •
ﻧﺳﺗﺧدم ﻣﺣرر اﻟﻧﺻوص ﻣﺛﻼ Notepad •
ﻧﻛﺗب اﻟﺑرﻧﺎﻣﺞ •
ﻣن ﻣﻔﺳر ﺑروﻟوج ﻧﺧﺗﺎر Fileﺛم Change Dirﻧﺣدد اﻟدﻟﯾل اﻟﻣوﺟود ﺑﮫ •
اﻟﺑرﻧﺎﻣﺞ
ﻧﻧﻔذ اﻟﺑرﻧﺎﻣﺞ ﺑوﺿﻊ اﺳم اﻟﺑرﻧﺎﻣﺞ ﺑﯾن اﻗواس ﻣرﺑﻌﺔ ، [FILE].ﺛم ﻧﺿﻐط ﻋﻠﻰ •
ﻣﻔﺗﺎح اﻻدﺧﺎل.
• ?- [filename].
• ?- [family].
6
اﻟﻌﻣﻠﻲ
• ﻧﻧﻔذ اﻟﺑرﻧﺎﻣﺞ family.plﺑوﺿﻊ اﺳم اﻟﺑرﻧﺎﻣﺞ ﺑﯾن اﻗواس ﻣرﺑﻌﺔ ،ﺛم ﻧﺿﻐط ﻋﻠﻰ
ﻣﻔﺗﺎح اﻻدﺧﺎل.
?- [family].
7
اﻟﻌﻣﻠﻲ
male(ali). اﻻﺳﺗﻔﺳﺎرات
male(veli).
female(zeynep). | ?- male(ali).
parent(ali,ayse).
parent(ali,ahmet). yes
parent(zeynep,ayse).
father(X,Y):-parent(X,Y), male(X). | ?-
father2(X,Y):-male(X),parent(X,Y).
somebodysparent(X):-father(X,Y).
somebodysparent(X):-mother(X,Y).
?- male(X).
?- father(X,Y).
8
An Example
mortal(X) :- person(X). • ?- mortal(lina).
person(sami).
• yes
person(lina).
9
Online Prolog
https://swish.swi-prolog.org/
10
An
Example
mortal_report.
11
An Example
mortal(X) :- person(X).
person(yousef). ?- mortal_report.
person(saleh). Known mortals are:
person(lojien). yousef
person(ahmad). saleh
mortal_report:- lojien
write('Known mortals are:'),nl, ahmad
false
mortal(X),
write(X),nl,
fail.
12
6 > 6.
false
6 < 6.
اﻟﻌﻼﻗﺎت اﻟﻣﻧطﻘﯾﺔ داﺧل اﻟﺑروﻟوج
false
6 =:= 6. ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت ﻗﯾم Xو Yھﻲ ﻧﻔس اﻟﻘﯾﻣﺔ X=:=Y •
true
6 =\= 6. ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت ﻗﯾم Xو Yﻣﺧﺗﻠﻔﺔ X=\=Y •
false ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت ﻗﯾﻣﺔ Xأﻗل ﻣن ﻗﯾﻣﺔ Y X<Y •
6 =< 6.
true
ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت ﻗﯾﻣﺔ Xأﻛﺑر ﻣن ﻗﯾﻣﺔ Y X>Y •
6 >= 6. ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت ﻗﯾﻣﺔ Xﺗﻘل أو ﺗﺳﺎوي ﻗﯾﻣﺔ Y X=<Y •
true
ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت ﻗﯾﻣﺔ Xأﻛﺑر أو ﺗﺳﺎوي ﻗﯾﻣﺔ Y X>=Y •
• ﻻﺣظ أن Xو Yﻓﻲ اﻟﻌﻼﻗﺎت أﻋﻼه ﯾﺟب أن ﺗﻛون ﺗﻌﺎﺑﯾر رﯾﺎﺿﯾﺔ ) (expressions mathematicalﻛﻲ
ﯾﻛون ﻟﮭﺎ ﻗﯾم ﺗﻘﺎرن ﻣﻌﺎ ً
6+2 < 6+7.
true
13
اﻟﻌﻼﻗﺎت اﻟﻣﻧطﻘﯾﺔ داﺧل اﻟﺑروﻟوج
X = = Yوﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت Xو Yھﻣﺎ اﻟﺷﻲء ﻧﻔﺳﮫ .ﻓﻣﺛﻼ: •
? 5==5.
true
? X == Y .
false
?1+5==1+5.
true
?5+1==1+5.
false
• ﻻﺣظ أن ﺑروﻟوج ﻻ ﺗﻌﺗﺑر 1+5 == 5+1وذﻟك ﻷﻧﮭﺎ ﻻ ﺗﻘوم ﺑﻣﻘﺎرﻧﺔ ﻗﯾم اﻟﺗﻌﺎﺑﯾر اﻟرﯾﺎﺿﯾﺔ
ﻋﻧد اﺳﺗﺧدام اﻟﻌﻼﻗﺔ اﻟﻣﻧطﻘﯾﺔ ==.
14
5 \== 6.
اﻟﻌﻼﻗﺎت اﻟﻣﻧطﻘﯾﺔ داﺧل اﻟﺑروﻟوج
true
5 \== 6. X \== Yوﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻟم ﺗﻛوﻧﺎ Xو Yاﻟﻲء ﻧﻔﺳﮫ . •
X = Yھذه اﻟﻌﻼﻗﺔ ﺳﺗﺣﺎول أن ﺗوﺣد )أو ﺗطﺎﺑﻖ( Xو Yﻣﻌﺎ ﺣﺳب ﺧوارزﻣﯾﺔ اﻟﺗوﺣﯾد اﻟﻣذﻛورة ﻓﻲ •
اﻟوﺣدة اﻟﺛﺎﻟﺛﺔ ﻓﺈذا ﻛﺎﻧﺎ ﻗﺎﺑﻠﯾن ﻟﻠﺗوﺣﯾد أﺟﺎﺑت ﻟﻐﺔ ﺑروﻟوج ﺑﻘﯾﻣﺔ اﻟﺗوﺣﯾد وإﻻ أﺟﺎﺑت ﻟﻐﺔ ﺑروﻟوج .no
ﻓﻣﺛﻼً ﻟﻧﺳﺄل ﻟﻐﺔ ﺑروﻟوج: •
?X = ali.
X = ali
أي أن ﻟﻐﺔ ﺑروﻟوج وﺣدت Xو . ali •
?- X=ali.
X = ali
true
أي أن ﻗﯾﻣﺔ اﻟﺗوﺣﯾد ھو أن ﺗﺻﺑﺢ ﻗﯾﻣﺔ Xاﻟﺗﻌﺑﯾر . 1/2 •
? -X=1/2.
X = 1/2
ﻻﺣظ أن ﻟﻐﺔ ﺑروﻟوج ﻟم ﺗﺣﺳب ﻗﯾﻣﺔ اﻟﺗﻌﺑﯾر اﻟرﯾﺎﺿﻲ 1/2ﺑل أﺑﻘت اﻟﺗﻌﺑﯾر ﻛﻣﺎ ھو. •
15
اﻟﻌﻼﻗﺎت ﻓﻲ اﻟﺑروﻟوج
?f=g.
false
أﻧﮫ ﻻ ﺗوﺟد طرﯾﻘﺔ ﻟﺗوﺣﯾد اﻟﺛواﺑت fو . g
16
اﻟﻌﻼﻗﺎت ﻓﻲ اﻟﺑروﻟوج
• X \= Yﺗﻛون ھذه اﻟﻌﻼﻗﺔ ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت Xو Yﻏﯾر ﻗﺎﺑﻠﺗﯾن ﻟﻠﺗوﺣﯾد .أي إذا
ﻟم ﺗوﺟد ﻣﺟﻣوﻋﺔ ﻣن اﻟﺗﻌوﯾﺿﺎت ﻓﻲ اﻟﻣﺗﻐﯾرات )(Variable Substitution
ﺑﺣﯾث ﺗﺟﻌل Xو Yﻣﺗطﺎﺑﻘﺗﯾن ﺗﻣﺎﻣﺎ ً .ﻣﺛﻼ ﻟو ﺳﺄﻟﻧﺎ ﻟﻐﺔ ﺑروﻟوج ﻧﻼﺣظ ان ﻓﻲ:
? f(X)\=f(ali).
false
?- f\=g.
true
• اﻟﺟﻣﻠﺔ اﻷوﻟﻰ اﺟﺎﺑت Noاو falseﻷﻧﮫ ﻣن اﻟﻣﻣﻛن ﺗوﺣﯾد ) f(aliو )f(x
• ﺑﯾﻧﻣﺎ ﻓﻲ اﻟﺟﻣﻠﺔ اﻟﺛﺎﻧﻲ اﺟﺎﺑت Yesاو trueﻷﻧﮫ ﻣن ﻏﯾر اﻟﻣﻣﻛن ﺗوﺣﯾد gو f
17
اﻟﻌﻼﻗﺎت ﻓﻲ اﻟﺑروﻟوج
ھﻧﺎك ﺑﻌض اﻟﻌﻼﻗﺎت اﻟﻣﻧطﻘﯾﺔ اﻟﺗﻲ ﺗﺳﺗطﯾﻊ اﺳﺗﺧداﻣﮭﺎ ﻣﻊ اﻟﺛواﺑت اﻹﺳﻣﯾﺔ •
(Strings).وﺗﻛﺗب اﻟﺛواﺑت اﻹﺳﻣﯾﺔ اﺑﺗداء ﺑﺣرف ﺻﻐﯾر ﻣﺛل aliأو ﺑﺎﺳﺗﺧدام
ﻓﺎﺻﻠﺔ ﻣﻔردة) (single quotesﻣﺛل ’. ‘ALI
وھذه اﻟﻌﻼﻗﺎت ھﻲ: •
x @< yوﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت Xﺗﺄﺗﻲ ﻗﺑل Yﻟﺣﺳﺎب اﻟﺗرﺗﯾب ﻷﺑﺟدي. •
ﻓﻣﺛﻼً :
?ali @< basem.
true
X @> Yوﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت Xﺗﺄﺗﻲ ﺑﻌد Yﺣﺳب اﻟﺗرﺗﯾب اﻷﺑﺟدي •
X @= < Yوﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت Xﺗﺄﺗﻲ ﻗﺑل Yﺣﺳب اﻟﺗرﺗﯾب اﻷﺑﺟدي •
X @> = Yوﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎﻧت Xو Yﻟﮭﻣﺎ اﻟﺗرﺗﯾب اﻷﺑﺟدي ﻧﻔﺳﮫ أو •
إذا ﻛﺎﻧت Xﺗﺄﺗﻲ ﺑﻌد Yﺣﺳب اﻟﺗرﺗﯾب اﻷﺑﺟدي .
18
Example
ali @> sami.
False
X @> Y
true
19
ﺟﻣﻠﺔ اﻟﺗﻌﯾﯾن و اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
• ﻻﺣظ أن X = Yﻓﻲ ﻟﻐﺔ ﺑروﻟوج ﺗﻌﻧﻲ ﺣﺎول ﺗوﺣﯾد Xو Yوﻟذا ﻻ ﻧﺳﺗطﯾﻊ
اﺳﺗﺧداﻣﮫ ﻟﺗﻌﯾﯾن ﻗﯾﻣﺔ ﺗﻌﺑﯾر ﺣﺳﺎﺑﻲ ﻟﻣﺗﻐﯾر ﻓﻲ ﻟﻐﺔ ﺑروﻟوج ﻓﻣﺛﻼً ﻟو ﺣﺎوﻟت
?X = 1 + 2.
• ﺗﺟﯾب ﻟﻐﺔ ﺑروﻟوج
X=1+2
? X is 1+2.
X=3
X is 5, X is 3+3.
false
21
ﺟﻣﻠﺔ اﻟﺗﻌﯾﯾن و اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
?X is 5, X is 3+3.
false
• ﺗﺟﯾب ﻟﻐﺔ ﺑروﻟوج ،noوذﻟك ﻷن ﻟﻐﺔ ﺑروﻟوج ﻋﻧدﻣﺎ ﻧﻔذت اﻟﮭدف
اﻟﻔرﻋﻲ اﻷول (X is 5) .أﻋطت اﻟﻣﺗﻐﯾر Xاﻟﻘﯾﻣﺔ 5
• ﻋﻧدﻣﺎ وﺻﻠت إﻟﻰ اﻟﮭدف اﻟﻔرﻋﻲ اﻟﺛﺎﻧﻲ X is 3 + 3ﻗﺎﻣت ﺑﺣﺳﺎب
3 + 3وﻷن ھذه اﻟﻘﯾﻣﺔ ) (6ﻣﺧﺗﻠﻔﺔ ﻋن ﻗﯾﻣﺔ Xاﻟﺣﺎﻟﯾﺔ وھﻲ )،(5
أﺟﺎﺑت ﻟﻐﺔ ﺑروﻟوج ﺑـ . no
22
اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
ھﻧﺎك اﻟﻣزﯾد ﻣن اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ اﻟﺗﻲ ﺗﻘوم ﺑﮭﺎ ﻟﻐﺔ اﻟﺑروﻟوج وھﻲ: •
وﺗﺳﺗﻌﻣل ﻛﻣﺎ رأﯾﻧﺎ ﻟﻠﺟﻣﻊ. + •
وﺗﺳﺗﻌﻣل ﻟﻠطرح. - •
وﺗﺳﺗﻌﻣل ﻟﻠﺿرب. * •
وﺗﺳﺗﻌﻣل ﻟﻠﻘﺳﻣﺔ اﻟﺣﻘﯾﻘﯾﺔ ).(real division / •
وﺗﺳﺗﻌﻣل ﻟﻠﻘﺳﻣﺔ اﻟﺻﺣﯾﺣﺔ ).(integer division // •
modوﺗﺳﺗﻌﻣل ﻹﯾﺟﺎد ﺑﺎﻗﻲ اﻟﻘﺳﻣﺔ اﻟﺻﺣﯾﺣﺔ. •
وﺗﺳﺗﻌﻣل ﻟﻠرﻓﻊ ﻟﻠﻘوة. ^ •
23
اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
X is 3+1.
• ﻻﺣظ اﻟﻔرق ﺑﯾن ﻧﺗﯾﺟﺔ 1/2و 1//2
X=4
• ﻟﺣﺳﺎب 1/2ﺗﺳﺗﻌﻣل ﻟﻐﺔ ﺑروﻟوج اﻟﻘﺳﻣﺔ اﻟﺣﻘﯾﻘﯾﺔ
X is 3-1. ﻓﺗﻛون اﻟﻧﺗﯾﺟﺔ ،0.5
X=2 • ﻟﺣﺳﺎب 1//2ﺗﺳﺗﻌﻣل ﻟﻐﺔ ﺑروﻟوج اﻟﻘﺳﻣﺔ اﻟﺻﺣﯾﺣﺔ
وﻟذا ﺗﻛون اﻟﻧﺗﯾﺟﺔ .0
X is 1/2.
X = 0.5
X is 1//2.
X=0
24
اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
X is 7//3.
X=2
X is 7/3.
X = 2.3333333333333335
26
اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
?- X is 3 * (4 + 2).
X = 18
?- X is (8 / 4) / 2.
X=1
27
اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
• converts centigrade temperatures to Fahrenheit, and
checks if a temperature is below freezing =< 32.
c_to_f(36,F).
c_to_f(C,F):- F is C * 9 / 5 + 32. F = 96.8
freezing(F):- F =< 32. freezing(44).
false
28
اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
Here are some examples of their use.
?- c_to_f(100,X).
X = 212
yes
?- freezing(15).
yes
?- freezing(45).
no
29
ﺗدرﯾﺑﺎت -اﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
X>Y ?- X is 2 + 2, X > 3.
X<Y X=4
X >= Y
X =< Y
?- X is 2 + 2, 3 >= X.
?- 4 > 3. no
yes
?- 4 < 3. ?- 3+4 > 3*2.
no yes
30
ﺗدرﯾﺑﺎت – اﻟﺗﻌﯾﯾن واﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
2 = 2.
2 = 2. =(mia,mia).
true =(mia,vincent).
mia = mia .
=(mia,mia). 'mia' = mia.
'2' = 2.
true mia = X.
kill(shoot(gun),Y) = kill(X,stab(knife)).
=(mia,vincent). kill(shoot(gun), stab(knife)) = kill(X,stab(Y)).
false likes(X,X) = likes(book,story).
mia = mia .
true kill(shoot(gun),Y) = kill(X,stab(knife)).
'mia' = mia. X = shoot(gun),
true Y = stab(knife)
'2' = 2. kill(shoot(gun), stab(knife)) = kill(X,stab(Y)).
false X = shoot(gun),
mia = X. Y = knife
X = mia likes(X,X) = likes(book,story).
false 31
ﺗدرﯾﺑﺎت – اﻟﺗﻌﯾﯾن واﻟﻌﻣﻠﯾﺎت اﻟﺣﺳﺎﺑﯾﺔ ﻓﻲ ﻟﻐﺔ ﺑروﻟوج
a \= b.
a \= b. a \= a.
true 'a' \= a.
A \= a.
a \= a. f(A) \= f(a). f(a) \= a.
false false f(a) \= A.
f(A) \= f(a).
'a' \= a. g(a,B,c) \= g(A,b,C). g(a,B,c) \= g(A,b,C).
false false g(a,b,c) \= g(A,C).
f(X) \= X.
A \= a. g(a,b,c) \= g(A,C).
false true
f(a) \= a. f(X) \= X.
true false
f(a) \= A.
false
32
اﺧﺗر اﻹﺟﺎﺑﺔ
• If sky is blue, everyone likes it. - Write this statement
as a prolog clause. . ﯾﺣﺑﮭﺎ اﻟﺟﻣﯾﻊ، إذا ﻛﺎﻧت اﻟﺳﻣﺎء زرﻗﺎء
A) sky(blue) :- everyone(likes).
B) blue(sky), likes(X).
C) likes(X, sky) :- blue(sky).
D) likes(sky, everyone) :- blue(sky).
33
ﻣﺎ ﻣﻌﻧﻰ ﺟﻣﻠﺔ ﺑروﻟوج اﻟﺗﺎﻟﯾﺔ
• What would be the English meaning for this prolog clause.
اﻟﻔراءFur
?- owner(jack, cat(X)) :- fur(X),spots(X). ﺑﻘﻊspots
34
• Do these different queries produce the same result in prolog?
؟prolog • ھل ﺗؤدي ھذه اﻻﺳﺗﻔﺳﺎرات اﻟﻣﺧﺗﻠﻔﺔ إﻟﻰ ﻧﻔس اﻟﻧﺗﯾﺟﺔ ﻓﻲ
?- N is -(+(5,6),4). and ?- N is (5+6)-4.
N is -(+(5,6),4).
A) yes N=7
B) no N is (5+6)-4.
N=7
35
• How will prolog respond to this query?
?- 11 + 4 is 15.
A) true
B) false
36
ﻣﺛﺎل max
• أﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً ﻟﺗﻌرﯾف اﻟﻌﻼﻗﺔ ) max(X,Y,Mﺑﺣﯾث ﺗﻛون Mھﻲ أﻛﺑر ﻗﯾﻣﺔ ﻣن
اﻟﻘﯾم Xو. Y
max(X,Y,M):-
max(3,7,Y).
Y=7
X>=Y,M is X.
max(X,Y,M):-
max(5,3,Y).
Y>X, M is Y.
Y=5
37
ﻣﺛﺎل اﻟﻘﯾﻣﺔ اﻟﻣطﻠﻘﺔ
• أﻛﺗب ﺑرﻧﺎﻣﺞ ) absval(X,Yﻟﺣﺳﺎب اﻟﻘﯾﻣﺔ اﻟﻣطﻠﻘﺔ yﻟـِ . X
abs(-7,Y).
abs(X,Y):-X<0, Y=7
Y is -1*X.
abs(3,Y).
abs(X,X):-X>0. Y=3
38
ﻣﺛﺎل اﻻﻋداد اﻟزوﺟﯾﺔ
• أﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً ﻟﺗﻌرﯾف اﻟﻌﻼﻗﺔ ) even(Xﺑﺣﯾث ﺗﻛون ﺻﺣﯾﺣﺔ ﻓﻘط إذا ﻛﺎن Xﻋددا ً زوﺟﯾﺎ ً.
even(4).
true
39
ﻣﺛﺎل اﻻﻋداد اﻟﻔردﯾﺔ
• أﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً ﻟﺗﻌرﯾف اﻟﻌﻼﻗﺔ ) odd(Xﺑﺣﯾث ﺗﻛون ﺻﺣﯾﺣﺔ ﻓﻘط إذا ﻛﺎن Xﻋددا ً ﻓردﯾﺎ.
odd(4).
false
40
Example
male(ram).
male(shyam).
female(sita).
female(gita).
parents(shyam, gita, ram).
parents(sita, gita, ram).
sister_of(X,Y):- female(X), parents(X, M, F), parents(Y, M, F).
41
Backtracking ?- sister_of (sita, shyam).
sister_of (X,Y):- female (X), parents (X, M, F),parents (Y, M, F).
sister_of (sita, shyam):- female (sita), parents (sita, M, F), parents (shyam, M, F).
{X/sita , Y/ shyam}
parents(sita,M,F) parents(shyam,M,F)
female(sita)
1. male(ram). parents(shyam,gita,ram)
2. male(shyam). parents(sita,gita,ram)
3. female(sita).
4. female(gita).
5. parents(shyam, gita, ram). success
6. parents(sita, gita, ram).
7. sister_of(X,Y):- female(X), parents(X, M, F), parents(Y, M, F).
Question Answering: whose sister is sita?
sister_of (sita,Y):- female (sita), parents (sita, M, F),parents (Y, M, F).
?- sister_of(sita, Y).
{X/sita}
1 5
{M/gita , F/ ram}
{M/gita , F/ ram}
parents(Y,gita,ram)
1. male(ram).
2. male(shyam). 6 {Y/ shyam}
parents(sita,gita,ram)
3. female(sita).
parents(shyam,gita,ram)
4. female(gita).
5. parents(shyam, gita, ram).
6. parents(sita, gita, ram). Success
7. sister_of(X,Y):- female(X), parents(X, M, F), parents(Y, M, F). Y=shyam
اﻻﺳﺗدﻋﺎء اﻟذاﺗﻲ )(Recursion
• ﻛﺗﺎﺑﺔ اﻟﻌﻼﻗﺔ ) predecessor(X,Yﺑﺣﯾث ﺗﻛون ﺻﺣﯾﺣﺔ إذا ﻛﺎن Xأﺣد أﺳﻼف
)أﺟداد( .Yﯾﻣﻛن ﻛﺗﺎﺑﺗﮭﺎ ﺑﺎﻟطرﯾﻘﺔ اﻟﺗﺎﻟﯾﺔ
predecessor (X,Y) :- parent (X,Y).
predecessor(X,Y) :- parent (X,Z), parent(Z,Y).
predecessor (X,Y) :- parent(X,Z1),parent(Z1, Z2), parent (Z2,Y).
ﺗﻘول اﻟﺟﻣﻠﺔ اﻷوﻟﻰ أن Xﺳﻠف Yإذا ﻛﺎﻧت Xھو أﺣد واﻟدي ،Y •
اﻟﺟﻣﻠﺔ اﻟﺛﺎﻧﯾﺔ ﺗﻘول أن Xﺳﻠف Yإذا ﻛﺎن ھﻧﺎﻟك Zﺑﺣﯾث ﺗﻛون Xأﺣد واﻟدي Z •
وﺗﻛون Zأﺣد واﻟدي ) Yأي أن Xھﻲ اﻟﺟد اﻷول ﻟـ .(Y
أﻣﺎ اﻟﺟﻣﻠﺔ اﻟﺛﺎﻟﺛﺔ ﻓﺗﻘول أن Xﺗﻛون أﺣد أﺳﻼف Yإذا ﻛﺎﻧت Xاﻟﺟد اﻟﺛﺎﻧﻲ ﻟـ Y •
وﻟو أردﻧﺎ اﻷﺧذ ﺑﻌﯾن اﻻﻋﺗﺑﺎر ان Xﻗد ﺗﻛون اﻟﺟد اﻟﺛﺎﻟث ﻟـ Yﻟﺗوﺟب ﻋﻠﯾﻧﺎ ﻛﺗﺎﺑﺔ •
ﺟﻣﻠﺔ راﺑﻌﺔ وھﻛذا.
44
اﻻﺳﺗدﻋﺎء اﻟذاﺗﻲ )(Recursion
• ﻟﻛﺗﺎﺑﺔ predecessorﺑﺷﻛل ﻋﺎم ،ﻏﯾر ﻣﺣدود ﺑﻌدد ﻣﻌﯾن ﻣن اﻷﺟﯾﺎل،
ﻧﺣﺗﺎج إﻟﻰ اﺳﺗﺧدام ﻓﻛرة اﻻﺳﺗدﻋﺎء اﻟذاﺗﻲ )(Recursion
predecessor(X,Y) :- parent(X,Y).
predecessor(X,Y) :- parent(X,Z),predecessor(Z,Y).
?- fact(3,X).
49
.N,...,3,2,1 أﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً ﻹﯾﺟﺎد ﻣﺟﻣوع اﻷرﻗﺎم
sum(0,0). sum(5,X).
X = 15
sum(N,S):-
N> 0, N1 is N-1,
sum(N1,S1),
S is N+S1.
50
Structures اﻟﺗراﻛﯾب
. ( ﺷرﻛﺔ ﻣﺎ ﺑﺎﺳﺗﺧدام ﻟﻐﺔ اﻟﺑروﻟوجemployees) • ﻟﻧﻣﺛل اﻟﺑﯾﺎﻧﺎت اﻟﺧﺎﺻﺔ ﺑﻣوظﻔﻲ
employee(Name,House_no,Street_name,City_name,Day,Month,Year) .
• ﻓﻣﺛﻼً اﻟﺟﻣﻠﺔ
employee(ali,5,salfeet_street,salfeet,19,10,1980).
employee(ali,address(5,salt_street,salfeet),date(19,10,1980)).
51
Structures اﻟﺗراﻛﯾب
employee(ali, address(5,salt_street,amman),date(19,10,1980)).
-?employee(ali,A,D).
52
Structures اﻟﺗراﻛﯾب
employee(ali,address(5,salt_street,salfeet),date(19,10,1980)).
employee(fatema,address(17,university_street,nablus),date(7,5,1985)).
employee(ahmad,address(11,king_street,salfeet),date(15,8,1985)).
53
اﻟﺗراﻛﯾب Structures
• اﻵن ﻧﺳﺗطﯾﻊ اﻟطﻠب ﻣن ﻟﻐﺔ ﺑروﻟوج ﺗزوﯾدﻧﺎ ﺑﺎﻟﻣﻌﻠوﻣﺎت اﻟﺧﺎﺻﺔ ﺑﻛل اﻟﻣوظﻔﯾن
اﻟذﯾن ﯾﺳﻛﻧون ﻣدﯾﻧﺔ salfeetﺑﺎﺳﺗﺧدام اﻟﺟﻣﻠﺔ اﻻﺳﺗﻔﺳﺎرﯾﺔ اﻟﺗﺎﻟﯾﺔ :
employee(Name,address(No,St,salfeet),D ).
54
اﻟﺗراﻛﯾب Structures
• ﻟﻼﺳﺗﻔﺳﺎر ﻋن ﺟﻣﯾﻊ اﻟﻣوظﻔﯾن اﻟذﯾن اﻟﺗﺣﻘوا ﺑﺎﻟﻌﻣل ﻓﻲ ﻋﺎم 1985ﻛﻣﺎ ﯾﻠﻲ :
employee(Name,A,date(D,M,1985)).
• ﻻﺳﺗﻔﺳﺎر ﻋن ﺟﻣﯾﻊ اﻟﻣوظﻔﯾن اﻟذﯾن ﺗزﯾد ﻓﺗرة ﻋﻣﻠﮭم ﻋﻠﻰ ﺧﻣﺳﺔ ﻋﺷر ﻋﺎﻣﺎ ً )ﻣﻊ
ﺗﺟﺎھل ﻋدد اﻷﯾﺎم واﻷﺷﮭر( وﺳﻧﻔرض أن اﻟﻌﺎم اﻟﺣﺎﻟﻲ ھو ﻋﺎم 1997ﻓﺗﻛون
اﻟﺟﻣﻠﺔ اﻻﺳﺗﻔﺳﺎرﯾﺔ اﻟﻣطﻠوﺑﺔ ھﻲ:
employee(X,A,date(Day,Month,Year)), 1997 - Year >15.
55
اﻟﺷﺟرة
• ﯾﻣﻛﻧﻧﺎ ﺗﻣﺛﯾل اﻟﺷﺟرة اﻟﺛﻧﺎﺋﯾﺔ اﻟﻔﺎرﻏﺔ ﺑﺎﻟرﻣز ،nilوإذا ﻟم ﺗﻛن ﻓﺎرﻏﺔ ﺑﺗرﻛﯾب
)أو ﻗﺎﻟب( ﺳﻧﺳﻣﯾﮫ bin_treeوﻟﮫ اﻟﺻﯾﻐﺔ اﻟﺗﺎﻟﯾﺔ:
56
اﻟﺷﺟرة
• ﻓﻣﺛﻼً ﻧﻣﺛل اﻟﺷﺟرة رﻗم )أ( ﺑﺎﻟﺗرﻛﯾب:
bin_tree(nil,a,nil).
57
اﻟﺷﺟرة
bin_tree(bin_tree(nil,b,nil),a,bin_tree(nil,c,nil)).
bin_tree(nil,a,nil).
58
bin_tree(bin_tree(nil,2,nil),5,bin_tree(bin_tree(nil,7,nil),10 ,
bin_tree(nil,9,bin_tree(nil,3,nil))))
bin_tree(bin_tree(nil,7,nil),
bin_tree(bin_tree(nil,2,nil) 10 ,
bin_tree(nil,9,bin_tree(nil,3,nil)))
(bin_tree(nil,7,nil)
bin_tree(nil,9,bin_tree(nil,3,nil)
59
count(nil,0). count ﻣﺛﺎل
count(bin_tree(Left,Root,Right),C):-
count(Left,C1),
count(nil,0).
count(Right,C2),
count(bin_tree(Left,_,Right),C):-
C is C1+C2+1.
count(Left,C1),
count(Right,C2),
C is C1+C2+1.
61
sum ﻣﺛﺎل
sum(nil,0).
sum(bin_tree(Left,Root,Right),S):-
count(Left,S1),
count(Right,S2),
S is S1+S2+Root.
62
depth ﻣﺛﺎل اﻟﻌﻣﻖ
depth(nil,0).
depth(bin_tree(Left,Root,Right),D):- depth(nil,0)
depth(Left,D1),
depth(Right,D2),
D1>=D2 ,
D is D1+1.
depth(bin_tree(Left,Root,Right),D):-
depth(Left,D1),
depth(Right,D2),
D2 >D1,
D is D2+1.
63
depth ﻣﺛﺎل اﻟﻌﻣﻖ
depth(nil,0).
depth(bin_tree(L,Root,R),D):-
depth(L,D1),
depth(R,D2),
max(D1,D2,M),
D is M+1.
max(X,Y,M):- X>=Y,
M=X.
max(X,Y,M):- Y>X
M=Y.
64
height(nil, 0).
height(tree(L, _ , R), H) :- height(L, HL), height(R, HR),
max(HL, HR, HN), H is HN + 1.
max(X, Y, X) :- X >= Y.
max(X, Y, Y) :- X < Y.
• Consult:
height(bin_tree(bin_tree(nil, 1, bin_tree(nil, 2, nil)), 3, nil), H).
height(bin_tree(bin_tree(nil,2,nil),5,bin_tree(bin_tree(nil,7,nil),10 ,
bin_tree(nil,9,bin_tree(nil,3,nil)))) ,H).
65
height(tree(tree(nil, 1, tree(nil, 2, nil)), 3, nil), H).
66
ﻣﻌﺎﻟﺟﺔ اﻟﻘواﺋم
ﺗﻌﺗﺑر اﻟﻘواﺋم listsﻣن أھم وأﻛﺛر اﻟﺗراﻛﯾب اﻟﻣﺳﺗﺧدﻣﺔ ﻓﻲ ﻟﻐﺔ اﻟﺑروﻟوج. •
وﻗد ﺗﻛون اﻟﻘﺎﺋﻣﺔ ﻓﺎرﻏﺔ وﯾرﻣز ﻟﮭﺎ ﻓﻲ ھذه اﻟﺣﺎﻟﺔ ﺑـ ] [ ،وإذا ﻟم ﺗﻛن ﻓﺎرﻏﺔ ﻓﺈن •
اﻟﻌﻧﺻر اﻷول ﻓﯾﮭﺎ ﯾﺳﻣﻰ ﺑﺎﻟرأس Headواﻟﻘﺎﺋﻣﺔ اﻟﻣﻛوﻧﺔ ﻣن ﺑﻘﯾﺔ اﻟﻌﻧﺎﺻر
ﺗﺳﻣﻰ ﺑﺎﻟذﯾل Tail
-ﻓﻣﺛﻼً ﻓﻲ اﻟﻘﺎﺋﻣﺔ [5,2,7,10] : •
ﯾﻛون اﻟرأس ھو اﻟﻌﻧﺻر اﻷول 5وﯾﻛون اﻟذﯾل اﻟﻘﺎﺋﻣﺔ ][2,7,10 •
وﻧﺳﺗطﯾﻊ ﺟﻌل ﻟﻐﺔ ﺑروﻟوج اﻟﻘﯾﺎم ﺑﻔرز اﻟرأس ﻋن اﻟذﯾل ﺑﺎﺳﺗﺧدام أداة اﻟرﺑط |. •
ﻓﻣﺛﻼً ﻟﻧﺟرب ھذه اﻟﺟﻣﻠﺔ اﻻﺳﺗﻔﺳﺎرﯾﺔ وﻧﻼﺣظ ﻣﺎذا ﺳﺗﺟﯾب ﻋﻠﯾﻧﺎ ﻟﻐﺔ ﺑروﻟوج: •
67
إن ﻣﺎ ﻗﺎﻣت ﺑﮫ ﻟﻐﺔ ﺑروﻟوج ھو
أﻧﮭﺎ وﺣدت
Hﻣﻊ اﻟرأس 5
Tﻣﻊ اﻟذﯾل ].[2,7,10
68
• ﻟﻧﺟرب ھذه اﻟﺟﻣﻠﺔ اﻻﺳﺗﻔﺳﺎرﯾﺔ
[H|T]=[ali].
• وﺗﺟﯾب ﻟﻐﺔ ﺑروﻟوج
H=ali
][=T
• ﻟﻧﺟرب اﻟﺟﻣﻠﺔ اﻻﺳﺗﻔﺳﺎرﯾﺔ اﻟﺗﺎﻟﯾﺔ :
[H|T] = [].
• ﺗﺟﯾب ﺑروﻟوج ،noوذﻟك ﻷن اﻟﺟﻣﻠﺔ اﻟﻔﺎرﻏﺔ ﻻ ﺗﺣﺗوي ﻋﻠﻰ رأس وذﯾل.
69
• ﻛﺗﺎﺑﺔ اﻟﺑرﻧﺎﻣﺞ ) member(X,Lاﻟذي ﯾﻘوم ﺑﺗﺣدﯾد ﻓﯾﻣﺎ إذا ﻛﺎن اﻟﻌﻧﺻر X
ﻣوﺟودا ً ﻓﻲ اﻟﻘﺎﺋﻣﺔ Lأم ﻻ.
member(X,[X,T]).
member(X,[ _|T]):- member(X,T).
ﺗﻘول اﻟﺟﻣﻠﺔ اﻷوﻟﻰ ﻓﻲ ﺗﻌرﯾف memberأن اﻟﻌﻧﺻر ﯾﻛون ﻣوﺟودا ً ﻓﻲ اﻟﻘﺎﺋﻣﺔ اذا
ﻛﺎن ھو رأس اﻟﻘﺎﺋﻣﺔ.
اﻟﺟﻣﻠﺔ اﻟﺛﺎﻧﯾﺔ ﺗﻘول أن اﻟﻌﻧﺻر ﯾﻛون ﻣوﺟودا ً ﻓﻲ اﻟﻘﺎﺋﻣﺔ إذا ﻛﺎن ﻣوﺟودا ﻓﻲ ذﯾﻠﮭﺎ.
70
member(X,[X,T]). •أن 5ﻟﯾﺳت أول ﻋﻧﺻر ﻓﻲ اﻟﻘﺎﺋﻣﺔ
member(X,[ _|T]):- member(X,T). ] [1,5ﻟذﻟك اﻟﺟﻣﻠﺔ اﻟﺗﻌرﯾﻔﯾﺔ اﻷوﻟﻰ ﻟـ
memberﻟم ﺗﻧطﺑﻖ
•ﻟذا ﻗﺎﻣت ﻟﻐﺔ ﺑروﻟوج ﺑﺎﺳﺗﺧدام
•اﻟﺟﻣﻠﺔ اﻟﺛﺎﻧﯾﺔ اﻟﺗﻲ ﺣﺎوﻟت ﺗﺣدﯾد ﻓﯾﻣﺎ إذا
5ﻣوﺟودة ﻓﻲ ذﯾل اﻟﻘﺎﺋﻣﺔ ].[5أي ﺗﺣوﻟت
اﻟﺟﻣﻠﺔ اﻻﺳﺗﻔﺳﺎرﯾﺔ اﻷﺻﻠﯾﺔ إﻟﻰ
member(5,[1,5]). )]،member(5,[5
yes •واﻵن وﺑﺎﺳﺗﺧدام اﻟﺟﻣﻠﺔ اﻷوﻟﻰ ﻟﺗﺣﻘﯾﻖ
ھذا اﻟﮭدف ﺗﺟﯾب ﻟﻐﺔ ﺑروﻟوج yes.
71
member(X,[a,b,c,d ]).
X=a;
X=b;
X=c;
X=d;
no
72
• أﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً ﯾﺣدد ﻋدد اﻟﻌﻧﺎﺻر اﻟﻣوﺟودة ﻓﻲ ﻗﺎﺋﻣﺔ ﻣﺎ.
– أن ﻋدد اﻟﻌﻧﺎﺻر ﻓﻲ اﻟﻘﺎﺋﻣﺔ اﻟﻔﺎرﻏﺔ ھو ﺻﻔر.
– وﻋدد اﻟﻌﻧﺎﺻر ﻓﻲ اﻟﻘﺎﺋﻣﺔ ﻏﯾر اﻟﻔﺎرﻏﺔ ھو واﺣد زاﺋد ﻋدد اﻟﻌﻧﺎﺻر اﻟﻣوﺟودة ﻓﻲ ذﯾل
اﻟﻘﺎﺋﻣﺔ.
count([ ],0 ).
count([X|T],C):-
count(T,C1 ),
C is C1 + 1.
count([a,b,c,d ],X).
73
• ﺑرﻧﺎﻣﺞ ﯾﺣدد ﻣﺟﻣوع اﻟﻘﯾم ﻓﻲ ﻗﺎﺋﻣﺔ ﻣﺎ ،ﻋﻠﻰ اﻓﺗراض أﻧﮭﺎ ﻗﯾم رﻗﻣﯾﺔ ﺑﺎﻟطﺑﻊ.
sum([ ],0).
sum([X|T],S):-
sum(T,S1),
S is S1 + X.
sum([2,4,7,9 ],X).
74
append
• اﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً ﻟوﺻل appendﻗﺎﺋﻣﺗﯾن ﻣﻌﺎ ً ﺑﺣﯾث ﯾﻛون اﻟﻧﺎﺗﺞ ﻗﺎﺋﻣﺔ ﺟدﯾدة
ﺗﺣﺗوي ﻋﻠﻰ ﺟﻣﯾﻊ ﻋﻧﺎﺻر اﻟﻘﺎﺋﻣﺔ اﻷوﻟﻰ ﺛم ﻋﻧﺎﺻر اﻟﻘﺎﺋﻣﺔ اﻟﺛﺎﻧﯾﺔ
75
append
76
ﻹﯾﺟﺎد أﻛﺑر ﻗﯾﻣﺔ ﻓﻲ ﻗﺎﺋﻣﺔ ﻣﺎ
77
ﻋدد اﻟﻣرات اﻟﺗﻲ ﯾﺗﻛرر ﻓﯾﮭﺎ ظﮭور اﻟﻌﻧﺻر Xﻓﻲ اﻟﻘﺎﺋﻣﺔ L
78
ﯾﺣﺳب ﻋدد اﻷرﻗﺎم اﻟزوﺟﯾﺔ Eوﻋدد اﻷرﻗﺎم اﻟﻔردﯾﺔ Oاﻟﺗﻲ
ﺗظﮭر ﻓﻲ اﻟﻘﺎﺋﻣﺔ L.
79
ﻣﺛﺎل
/* Take X out of list [1,2,3,4] */
takeout(A,[A|B],B).
takeout(A,[B|C],[B|D]) :- takeout(A,C,D).
?- takeout(X,[1,2,3,4],Y).
X=1 Y=[2,3,4]
X=2 Y=[1,3,4] ;
X=3 Y=[1,2,4] ;
X=4 Y=[1,2,3] ;
no 80
اﻟﻧﻔﻲ واﻟﻘطﻊ
اﻟﺗﺣﻛم ﻓﻲ ﻋﻣﻠﯾﺔ اﻟﺗراﺟﻊ backtrackingاﻟﺗﻲ ﺗﻘوم ﺑﮭﺎ ﻟﻐﺔ اﻟﺑروﻟوج ﺣﯾن •
ﺗﺻل إﻟﻰ طرﯾﻖ ﻣﺳدود .
اﻷھداف اﻟﻣﻧﻔﯾﺔ Negated Goals •
ﻧﺳﺗطﯾﻊ أن ﻧﺷﺗرط ﻋدم ﺗﺣﻘﻖ ھدف ﻣﻌﯾن Gﺑﺎﺳﺗﺧدام اﻹﺟراء . not •
ﻓﻣﺛﻼً ﻧﺳﺗطﯾﻊ ﺗﻌرﯾف اﻟﻌﻼﻗﺔ bigﻛﻣﺎ ﯾﻠﻲ: •
big(X):-not(small(X)).
ﺗﻘول ھذه اﻟﻘﺎﻋدة اﻧﻧﺎ ﻧﺳﺗطﯾﻊ اﺳﺗﻧﺗﺎج ) big(Xإذا ﻟم ﻧﺗﻣﻛن ﻣن اﺛﺑﺎت •
) ،small(Xوھو ﻣﺎ ﯾﻌرف ﺑﺎﻟﻧﻔﻲ ﻋﻧد اﻟﻔﺷل Negation as Failure.
81
اﻟﻧﻔﻲ واﻟﻘطﻊ
82
اﻟﻧﻔﻲ واﻟﻘطﻊ
• وﻣن اﻻﺧطﺎء اﻟﺷﺎﺋﻌﺔ ﻋﻧد اﺳﺗﺧدام اﻹﺟراء notأن ﯾﺳﺗﻌدى ﻋﻠﻰ ھدف ﯾﺣﺗوي
ﻋﻠﻰ ﻣﺗﻐﯾرات ﻟم ﺗﻌطﻰ ﻗﯾﻣﺔ ﺑﻌد.
• ﻣﺛﻼً ﻟو أردﻧﺎ ﺳؤال ﺑروﻟوج ھل ﯾوﺟد أي ﺷﻲء ﻛﺑﯾر
? big(X).
no
• أﺟﺎﺑت ﺑـ noﻷﻧﮭﺎ ﻟم ﺗﺳﺗطﻊ اﺛﺑﺎت) not(small(Xﻷي ﻗﯾﻣﺔ ﻟـ X
83
اﻟﻧﻔﻲ واﻟﻘطﻊ
• اﻟﺗﺣﻛم ﻓﻲ ﻋﻣﻠﯾﺔ اﻟﺗراﺟﻊ Controlling Backtracking
• ﺑﺎﺳﺗﺧدام أداة اﻟﻘطﻊ ! cutأن ﻧﻣﻧﻊ ﻟﻐﺔ ﺑروﻟوج ﻣن اﻟﻘﯾﺎم ﺑﻌﻣﻠﯾﺔ اﻟﺗراﺟﻊ
backtracking
• ﻣﺛﻼً ﻗد ﯾﻌﺗﻘد اﻟﻣرء أﻧﮫ ﻣن اﻟﻣﻣﻛن ﻛﺗﺎﺑﺔ اﻟﺑرﻧﺎﻣﺞ )max(X,Y,Mاﻟذي ﯾﺟد أﻛﺑر
ﻗﯾﻣﺔ Mﺑﯾن اﻟﻘﯾم Xو Yﻛﻣﺎ ﯾﻠﻲ:
max(X,Y,X):-
X>=Y.
max(X,Y,Y).
84
اﻟﻧﻔﻲ واﻟﻘطﻊ
• أﺣد اﻟطرق ﻟﻌﻣل ذﻟك ھﻲ ﺑﺎﺳﺗﺧدام أداة اﻟﻘطﻊ ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺟﻣﻠﺔ
اﻷوﻟﻰ ﻛﻣﺎ ﻓﻲ اﻟﺑرﻧﺎﻣﺞ اﻟﺗﺎﻟﻲ:
max(X,Y,X):-
X>=Y,!.
max(X,Y,Y ).
• اﻵن ﻟﻧﺳﺄل ﻟﻐﺔ ﺑروﻟوج اﻟﺳؤال اﻟﺗﺎﻟﻲ:
•
85
اﻟﻧﻔﻲ واﻟﻘطﻊ
• ﻻﺣظ :أن وﺟود أداة اﻟﻘطﻊ ﻓﻲ اﻟﺟﻣﻠﺔ اﻷوﻟﻰ ﻣﻧﻊ ﻟﻐﺔ ﺑروﻟوج
ﻣن اﻟﺗراﺟﻊ واﺳﺗﺧدام اﻟﺟﻣﻠﺔ اﻟﺛﺎﻧﯾﺔ.
• ﻣﺛﺎل آﺧر ﻋﻠﻰ اﺳﺗﺧدام أداة اﻟﻘطﻊ ﻟﻧﻛﺗب ﺑرﻧﺎﻣﺟﺎ ً
) add(X,Lﯾﺿﯾف اﻟﻌﻧﺻر Xإﻟﻰ اﻟﻘﺎﺋﻣﺔ Lﻓﻘط إذا ﻟم ﯾﻛن
ذﻟك اﻟﻌﻧﺻر ﻣوﺟودا ﻣﺳﺑﻘﺎ ﻓﻲ ﺗﻠك اﻟﻘﺎﺋﻣﺔ.
add(X,L,L):-
(member(X,L),!.
add(X,L,[X|L]).
86
اﺟراءات داﺧﻠﯾﺔ اﺧرى More built -in procedure
اﻷﻣر) write(X : •
ﯾﺳﺗﺧدم اﻷﻣر) write(Xﻟطﺑﺎﻋﺔ اﻟﺣد Xﻋﻠﻰ ﺟﮭﺎز اﻹﺧراج ،وھو ﺷﺎﺷﺔ •
اﻟﺣﺎﺳوب ﻋﺎدة ﻟﻛن ﻟﯾس ﺑﺎﻟﺿرورة ﻓﻣن اﻟﻣﻣﻛن اﻟﻛﺗﺎﺑﺔ ﻋﻠﻰ ﻣﻠف ﻋﻠﻰ اﻟﻘرص
اﻟﻣﻐﻧﺎطﯾﺳﻲ magnetic diskأو ﻋﻠﻰ أي ﺟﮭﺎز إﺧراج آﺧر.
وﻗد ﯾﻛون اﻟﺣد Xﻣﺗﻐﯾرا ً variableأو ﺛﺎﺑت constantأو ﻗﺎﺋﻣﺔ listأو •
ﺣﺗﻰ ﺗرﻛﯾب structure
writeﻣﮭﻣﺎ ﻛﺎﻧت ﻣن ﻣزاﯾﺎ ﻟﻐﺔ ﺑروﻟوج أﻧﮭﺎ ﺗﻌرف ﻛﯾف ﺗﻧﻔذ أﻣر اﻟطﺑﺎﻋﺔ •
طﺑﯾﻌﺔ اﻟﺣد . X
87
write(X)اﻷﻣر
88
write(X)اﻷﻣر
89
اﻷﻣر)read(X
• ھذا اﻷﻣر ﺳﯾﺗﺳﺑب ﻓﻲ أن ﺗﻘرأ ﻟﻐﺔ ﺑروﻟوج ﻗﯾﻣﺔ ﻣن ﺟﮭﺎز اﻹدﺧﺎل ،وﯾﺟب
أن ﺗﻧﺗﮭﻲ ھذه اﻟﻘﯾﻣﺔ ﺑﻧﻘطﺔ ﺛم ﺗﺣﺎول ﻟﻐﺔ ﺑروﻟوج ﺗوﺣﯾد )ﻣطﺎﺑﻘﺔ( ھذه
اﻟﻘﯾﻣﺔ ﻣﻊ X
• ﻓﺈذا ﻛﺎﻧت Xﻣﺗﻐﯾر ﻻ ﯾﺣﻣل أي ﻗﯾﻣﺔ ﯾﻧﺗﺞ ﻋن ھذه اﻟﻌﻣﻠﯾﺔ أن ﺗﺻﺑﺢ ﻗﯾﻣﺔ
Xھﻲ اﻟﻘﯾﻣﺔ اﻟﻣﻘروءة.
• إذا ﻛﺎﻧت Xﺛﺎﺑت أو ﻣﺗﻐﯾر ﯾﺣﻣل ﻗﯾﻣﺔ ﻏﯾر ﺗﻠك اﻟﻣﻘروءة ﻋﻧدھﺎ ﺳﺗﻔﺷل
ﻟﻐﺔ ﺑروﻟوج ﻓﻲ ﺗﺣﻘﯾﻖ ھدف اﻟﻘراءة وﺳوف ﺗﺗراﺟﻊ backtrackﻟﮭدف
ﺳﺎﺑﻖ.
90
ﻣﺛﺎل
91
ﻣﺛﺎل ﻹﯾﺟﺎد ﻣرﺑﻊ ﻋدد
92
إﺟراءات داﺧﻠﯾﺔ أﺧرى More built -in procedure
93
اﻹﺟراء )assert(C
94
ﻣﺛﺎل
95
اﻹﺟراء )retract(C
• اﻹﺟراء ) retract(Cﯾﻌﻣل ﻋﻣﻼ ﻣﻌﺎﻛﺳﺎ ً ﺗﻣﺎﻣﺎ ً ﻟـ ) assert(Cإذ أﻧﮫ ﯾﺣذف
اﻟﺟﻣﻠﺔ Cﻣن اﻟﺑرﻧﺎﻣﺞ
• ﻣن اﻟﺟدﯾر ﺑﺎﻟذﻛر أن ) retract(Cﺗﺣذف أول ﺟﻣﻠﺔ ﻓﻲ اﻟﺑرﻧﺎﻣﺞ ﺗطﺎﺑﻖ ﯾﻣﻛن
ﺗوﺣﯾدھﺎ ﻣﻊ . C
96
abolish
abolishﺗﺳﺗﺧدم ﻟﺣذف ﺟﻣﯾﻊ اﻟﺟﻣل اﻟﺧﺎﺻﺔ ﺑﺗﻌرﯾف اﻟﻌﻼﻗﺔ •
parentﻋﻠﻰ ﺳﺑﯾل اﻟﻣﺛﺎل
ﻧﺳﺗﺧدم اﻻﺟراء ) abolish(Pred_name,Nﺣﯾث ﺗﻣﺛل •
Pred_nameاﺳم اﻟﻌﻼﻗﺔ اﻟﺗﻲ ﻧود ﺣذف ﺟﻣﯾﻊ اﻟﺟﻣل اﻟﻣﻌّ ِرﻓﺔ
ﻟﮭﺎ ،وﺗﻣﺛل Nﻋدد ﻋواﻣل اﻟﻌﻼﻗﺔ ﻧﻔﺳﮭﺎ.
ﻋﻠﻰ ﺳﺑﯾل اﻟﻣﺛﺎل: •
? abolish(parent,2).
yes
ﺗﺣذف ﻣن اﻟﺑرﻧﺎﻣﺞ ﺟﻣﯾﻊ اﻟﺟﻣل اﻟﻣﻌرﻓﺔ ﻟﻠﻌﻼﻗﺔ parent •
اﻟرﻗم 2ﯾﻣﺛل ﻋدد ﻋواﻣل اﻟﻌﻼﻗﺔ . parent •
97
أﻣر اﻟﻔﺷل fail
• أﻣر اﻟﻔﺷل - failﺗزودﻧﺎ ﻟﻐﺔ ﺑروﻟوج ﺑﺎﻹﺟراء اﻟداﺧﻠﻲ failاﻟذي ﯾﺳﺗﺧدم ﻹﺟﺑﺎر
ﻟﻐﺔ ﺑروﻟوج ﻋﻠﻰ اﻟﻔﺷل واﻟﺗراﺟﻊ . backtracking
• ﯾﺳﺗﺧدم ﻻﺟﺑﺎر ﺑروﻟوج ﻋﻠﻰ اﯾﺟﺎد ﺟﻣﯾﻊ اﻟﺣﻠول اﻟﻣﻣﻛﻧﺔ دون اﻟﺣﺎﺟﺔ اﻟﻰ ﺗدﺧل ﻣن
اﻟﻣﺳﺗﺧدم ﺑوﺿﻊ ﻓﺎﺻﻠﺔ ﻣﻧﻘوطﺔ ﺑﻌد ﻛل ﺣل.
• ﻓﻣﺛﻼً ﻧﺳﺗطﯾﻊ أن ﻧﻛﺗب اﻟﺑرﻧﺎﻣﺞ all_parentsاﻟذي ﯾﻛﺗب ﻟﻧﺎ اﺳم ﻛل اﻻﺑﺎء
اﻟﻣﻌرﻓﯾن ﻣن ﺧﻼل )parent(X,Y
98
ﻣﺛﺎل ﻋﻠﻰ fail
ﻻﺣظ أن ﻟﻐﺔ ﺑروﻟوج أﻋطﺗﻧﺎ أﺳﻣﺎء ﺟﻣﯾﻊ اﻵﺑﺎء دون أن ﻧﺿﻊ ﻓﺎﺻﻠﺔ
ﻣﻧﻘوطﺔ ﺑﻌد ﻛل إﺟﺎﺑﺔ ﻹﺟﺑﺎرھﺎ ﻋﻠﻰ اﻟﺗراﺟﻊ.
99
أﻣر اﻟﻔﺷل fail
• ھدف failﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺟﻣﻠﺔ اﻷوﻟﻰ ﻟـ all_parentsأﺟﺑﺎر ﻟﻐﺔ ﺑروﻟوج ﻋﻠﻰ
اﻟﻔﺷل واﻟﺗراﺟﻊ واﺳﺗﺧدام ﺟﻣﻠﺔ أﺧرى ﻣن ﺟﻣل ،parent
• ﺑﻌد طﺑﺎﻋﺔ اﺳم اﻷب اﻟذي ظﮭر ﻓﻲ ﺟﻣﻠﺔ parentاﻟﺟدﯾدة ﺗﻔﺷل ﻟﻐﺔ ﺑروﻟوج ﻣرة
أﺧرى وﺗﻌﯾد اﻟﻛرة إﻟﻰ أن ﺗﺳﺗﻧﻔذ ﺟﻣﯾﻊ ﺟﻣل parentاﻟﻣوﺟودة ﻓﻲ اﻟﺑرﻧﺎﻣﺞ.
• ھﻧﺎ ﯾﺄﺗﻲ دور اﻟﺟﻣﻠﺔ اﻟﺛﺎﻧﯾﺔ ﻣن ﺟﻣل all_parentsاﻟﺗﻲ ﺗﻣﻧﻊ ﻟﻐﺔ ﺑروﻟوج ﻣن
طﺑﺎﻋﺔ noﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻌﻣﻠﯾﺔ.
100
أﻣر اﻹﻋﺎدة repeat
• أﻣر اﻹﻋﺎدة - repeatﺗزودﻧﺎ ﻟﻐﺔ ﺑروﻟوج ﺑﺎﻹﺟراء اﻟداﺧﻠﻲ repeatاﻟذي
ﯾﺳﺗﺧدم ﻟﻌﻣل دوران ﻏﯾر ﻧﮭﺎﺋﻲ .
• ﺗﺷﻛل repeatﻧﻘطﺔ ﺗﻔرع إﺿﺎﻓﯾﺔ ﻋﺎدة ﻣﺎ ﺗﺳﺗﺧدم ﻣﻊ اﻹﺟراء . fail
• ﻓﻣﺛﻼً اﻟﺑرﻧﺎﻣﺞ اﻟﺗﺎﻟﻲ ﯾﻘرأ ﻣﺟﻣوﻋﺔ ﻣن اﻷرﻗﺎم وﯾطﺑﻊ ﻣرﺑﻌﺎﺗﮭﺎ ،وﯾﺗوﻗف ﻓﻘط ﻋﻧد
إدﺧﺎل اﻟﻛﻠﻣﺔ . stop
101
do repeat
repeat ,
read(X),
square(X). ?do
5.
fail . 25
6.
do . 36
square(stop ):- !. stop.
square(X ):- yes
Y is X * X ,
write(Y),nl.
102
اﻻﺻﻄﻨﺎ� واﻷﻧﻈﻤﺔ
ي اﻟﺬكﺎء
اﻟﺨﺒ�ة ) (1484
ي
ف
اﻟ�ﻣﺠﺔ ي�
اﻟﻮﺣﺪة اﻟﺨﺎﻣﺴﺔ :ب
اﻟ�وﻟ�ج
ﻟﻐﺔ ب
Prolog اﻋﺪاد :أ.د .ﻳﻮﺳﻒ اﺑﻮزر
ﺟﺎﻣﻌﺔ اﻟﻘﺪس اﻟﻤﻔﺘﻮﺣﺔ
ف
اﻟﺼ��) (1193 ا�
2020 ي اﻟﻔﺼﻞ اﻟﺪر ي