The Prolog Language

Download Report

Transcript The Prolog Language

‫معرفی زبان برنامه نویس ی پرولوگ‬
‫وحیدی اصل‬
‫‪1‬‬
!‫دید اولیه‬
• man(a1).
man(saeed).
man(saman).
plays3tar(saeed).
concert.
----------------
• ?- man(a1).
yes or True
• ?- plays3tar(a1).
No or False
?- plays3tar(X).
X=saeed
2
‫تاریخچه‬
‫• در اوایل دهه ‪ 70‬نسخه اولیه پرولوگ به هدف پردازش زبان طبیعی‬
‫ابداع شد‪.‬‬
‫• پرولوگ براساس منطق مرتبه اول توسعه پیدا کرده است‪.‬‬
‫‪3‬‬
‫تعریف روابط با استفاده ازحقایق‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫پرولوگ (‪ )programming in logic‬یک زبان برنامه نویس ی برای محاسبات نمادین‬
‫(سمبولیک) و غیرعددی می باشد‪.‬‬
‫برای حل مسائلی استفاده می شود که شامل اشیا و روابط میان آنها می باشند‪.‬‬
‫وقتی می گوییم تام والد باب است‪ ،‬تام و باب هردو شیئ می باشند و نسبت والدی رابطه‬
‫میان این دو شیئ را مشخص می کند‪.‬‬
‫در پرولوگ‪ ،‬برای بیان این دو شیئ و رابطه میان آنها می نویسیم‪:‬‬
‫‪parent(tom,bob).‬‬
‫‪4‬‬
5
http://www.swi-prolog.org/
6
7
8
9
‫ شجره نامه خانوادگی‬:‫مثال‬
pam
tom
bob
ann
liz
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob, ann).
parent(bob,pat).
parent(pat,jim).
Instances or
relationships
‫پایگاه دانش‬
pat
A relation is defined as a set
of all its instances
jim
10
‫چگونه از پرولوگ پرس و جو کنیم؟‬
• ?- parent(bob,pat).  yes
• ?-parent(liz,pat).  no
• ‫با استفاده از متغیرها که با حروف بزرگ نوشته می شوند‬
pam
?-parent(X,liz).
 X=tom
?-parent(bob,X).
 X=ann if more than one answer, press ; to get others or press enter to stop
 X = pat
?-parent(X,Y).
 Using , to make conjunction (and)
tom
bob
ann
liz
pat
 Who grandparent of jim?
 ?- parent(Y,jim), parent(X,Y).
 Using ; to make disjunction (or)
 ?-parent(Y,jim);parent(Y,pat).
jim
11
‫ساختار پرولوگ‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪12‬‬
‫پرولوگ دارای سه ساختار اساس ی است‪:‬‬
‫حقایق )‪(facts‬‬
‫قواعد )‪(rules‬‬
‫پرس و جوها (‪(queries‬‬
‫به مجموعه حقایق و قواعد یک پایگاه دانش )‪(knowledge base‬‬
‫یا )‪(database‬گفته می شود‪.‬‬
‫برنامه نویس ی پرولوگ در حقیقت نوشتن این پایگاههای دانش می باشد‪.‬‬
‫مجموعه ای از حقایق و قواعد که روابط موردعالقه ما را توصیف می کنند‪.‬‬
‫چگونه از یک برنامه پرولوگ استفاده نماییم؟‬
‫• با پرسیدن سواالتی درباره اطالعات ذخیره شده در پایگاه دانش‬
‫• برخالف زبانهای دیگر برنامه نویس ی که در آنها به کامپیوتر می گوییم‬
‫چه کاری انجام دهد‪ ،‬در پرولوگ مجموعه ای از روابط را برای‬
‫کامپیوتر تعریف کرده و بعد راجع به آنها از کامپیوتر پرس وجو می‬
‫کنیم‪.‬‬
‫• این ویژگی ها پرولوگ را برای کاربردهای خاص ی ممتاز می نماید‪.‬‬
‫– زبانشناس ی محاسباتی مانند )‪(NPL‬‬
‫– هوش مصنوعی )‪(AI‬‬
‫‪13‬‬
‫نحوه ایجاد یک پایگاه دانش‬
parent(amy,bob).
parent(bob,cathy).
parent(bob,doug).
grandparent(X,Z) :- parent(X,Y) , parent(Y,Z).
ancestor(X,Y) :- parent(X,Y).
ancestor(X,Y) :- parent(Z,Y) , ancestor(X,Z).
\\\\\\\\\\\\\
parent(amy,bob).
ancestor(bob,doug).
ancestor(amy,cathy).
14
‫عبارات (‪)Clauses‬‬
‫• یک برنامه پرولوگ از مجموعه ای از عبارات تشکیل شده است‪.‬‬
‫>‪clauses: <head>:- <body‬‬
‫• هم ‪ head‬و هم ‪ body‬از روابط ( ‪ )relationships‬ایجاد‬
‫شده اند که به این روابط ‪،‬گزاره ها )‪(predicate‬هم گفته می‬
‫شود‪.‬‬
‫‪15‬‬
‫تعریف روابط با استفاده قواعد‬
‫‪Clause ‬ها در پرولوگ به سه دسته تقسیم می شوند‪ facts, rules :‬و ‪questions‬‬
‫‪ ‬حقایق مواردی هستند که بدون تکیه بر شرط خاص ی برقرار هستند‪ .‬مثال‪:‬‬
‫‪male(bob).‬‬
‫‪ ‬قواعد مواردی هستند که با تکیه بر شرط خاص ی درست هستند‪.‬‬
‫‪grandparent(X,Z):- parent(X,Y),parent(Y,Z).‬‬
‫‪ ‬مثال‪:‬‬
‫‪ ‬به قسمت سمت راست نماد ’‪ ‘:-‬بخش یا بدنه شرطی می گویند‪.‬‬
‫‪ ‬به قسمت سمت چپ نماد ’‪ ‘:-‬نتیجه یا ‪ head‬می گویند‪.‬‬
‫‪ ‬پرسشها یا پرس و جوها – کاربر می تواند درباره درستی موارد و یا اینکه‬
‫کدام موارد درست هستند‪ ،‬پرسش کند‪.‬‬
‫‪ ‬یک پرسش در پرولوگ به صورت یک هدف )‪ (goal‬بیان می شود‪ .‬در حقیقت هدف‪،‬‬
‫پرسش ی است که می خواهیم بدانیم برقرار است یا خیر و یا به ازای چه مقادیری برقرار‬
‫می باشد؟ یک هدف ممکن است از چندین زیرهدف )‪ (sub goals‬ایجاد شده‬
‫باشد‪.‬هریک از این زیرهدف ها خود یک پرسش می باشند‪.‬‬
‫‪?- parent(Y,jim), parent(X,Y).‬‬
‫‪16‬‬
‫قواعد بازگشتی‬
• ‫برخی مواقع نیاز است که در پرولوگ قواعد‬
:‫به صورت بازگشتی نوشته شود‬
• Predecessor case
X
Y
– predecessor(X,Z):-parent(X,Z).
– predecessor(X,Z):-parent(X,Y),
predecessor(Y,Z).
………..
Putting Comment:
/* */ => between those /* and */ are comment
% => starting from % to end of line is comment
Z
17
‫مثالی دیگر‬
‫‪18‬‬
‫پرولوگ چگونه به پرسشها پاسخ می دهد؟‬
‫• پرولوگ به جستجوی هدفهایی می رود که توسط کاربر به صورت پرسش‬
‫مطرح شده اند‪.‬‬
‫• پرولوگ به دنبال مسیر موفق می گردد و اگر وارد انشعابی ناموفق شد‪ ،‬به‬
‫مسیرقبلی بازگشته و می کوشد انشعابات دیگر را بررس ی کند‪.‬‬
‫• به چنین رویه ای‪ ،‬راهبرد عقبگرد )‪(backtracking‬گفته می شود که‬
‫مبتنی برالگوریتم ‪ DFS‬است‪.‬‬
‫‪19‬‬
‫پرولوگ چگونه به پرسشها پاسخ می دهد؟‬
‫‪20‬‬
‫پرولوگ چگونه به پرسشها پاسخ می دهد؟‬
‫‪21‬‬
‫پرولوگ چگونه به پرسشها پاسخ می دهد؟)‪(TRACING‬‬
‫‪22‬‬
‫ساختار نحوی پرولوگ و برنامه نویسی در آن‬
‫•‬
‫‪Data objects‬‬
‫‪structures‬‬
‫اشیای داده ای‪ :‬ترکیبی از اشیای ساده‪ ،‬ساختارها‪ ،‬ثابتها‪ ،‬متغیرها‪،‬‬
‫اتم ها و اعداد می باشند‪.‬‬
‫اتم ها و اعداد‪:‬‬
‫•‬
‫اتم ها به سه روش ایجاد می شوند‪:‬‬
‫–‬
‫(‪ )1‬رشته ای از کاراکترها‪،‬ارقام و کاراکتر ”_“ که با یک حرف کوچک آغاز شده باشد‪.‬‬
‫ً‬
‫(‪ )2‬رشته ای از کاراکترهای خاصو مثال >‪<---‬‬
‫(‪ )3‬رشته ای از کارکترها که در یک کوتیشن قرار گرفته اند‪ :‬مانند ’‪‘Tom‬‬
‫‪Simple objects‬‬
‫‪variables‬‬
‫‪numbers‬‬
‫‪constants‬‬
‫‪atoms‬‬
‫•‬
‫–‬
‫متغیرها‪ -‬رشتهای از حروف و ارقام و خط زیرین که حتما با یک حرف‬
‫بزرگ یا خط زیرین اغاز شود‪.‬‬
‫‪E.g X, _x‬‬
‫_ ‪Anonymous variables, used as underscore, eg.‬‬
‫–‬
‫‪23‬‬
‫متغیرها‪-‬‬
‫‪?-parent(X,_).‬‬
‫•‬
‫•‬
‫–‬
‫محدوده تعریف –متغیرها در یک عبارت و اتمها در کل برنامه قابل‬
‫شناسایی هستند‬
‫ساختارها‬
‫‪date‬‬
‫‪2006‬‬
‫‪feb‬‬
‫‪1‬‬
‫• اگر اشیا از چند مؤلفه ساخته شده باشند‪.‬‬
‫• هر مؤلفه ‪ ،‬خود می تواند یک ساختار باشد‪.‬‬
‫‪– e.g date(1,feb, 2006). or‬‬
‫‪date(Day,feb,2006).‬‬
‫یک ساختار می تواند به صورت یک درخت نمایش داده شود‪.‬‬
‫به ریشه درخت فانتر)‪ (funter‬و به هر زیردرخت آرگومان گفته می شود‪.‬‬
‫هر فانتر با دو عنصر نمایش داده می شود‪.‬‬
‫)‪(1‬نام ساختار که از قواعد نمایش اتم پیروی می کند‪.‬‬
‫)‪(2‬تعداد آرگومانها‬
‫•‬
‫•‬
‫•‬
‫‪24‬‬
‫میمون و موز‬
‫• مسئله‪ -‬در وسط اتاق‪ ،‬موزی از سقف آویزان است و میمون می کوشد با‬
‫کمک یک جعبه و باال رفتن از آن به موز دست یابد‪:‬‬
‫• رویکردها‬
‫– حاالت اولیه )‪(state‬‬
‫• ‪ Monkey is at the floor‬میمون برروی زمین است‬
‫• ‪Money is at the door‬میمون مقابل در است‬
‫جعبه کنار پنجره است‬
‫• ‪Box is at window‬‬
‫• ‪ Monkey does not have banana‬میمون موز ندارد‬
‫– حرکتهای ممکن‬
‫• ‪ Grap banana‬گرفتن موز )‪(grasp‬‬
‫باال رفتن از جعبه)‪(climb‬‬
‫• ‪Climb box‬‬
‫هل دادن جعبه)‪push(X,Y‬‬
‫• ‪Push box‬‬
‫•‪ Walk around 25‬راه رفتن در جهات مختلف)‪walk(X,Y‬‬
‫فرموله بندی مسئله‬
‫حاالت مسئله‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫موقعیت اشیای موجود در مسئله را توصیف می کند‪ :‬موقعیت افقی میمون در اتاق‬
‫‪)position of monkey‬‬
‫موقعیت عمودی میمون در اتاق( ‪،)vertical position of monkey‬‬
‫موقعیت جعبه )‪(position of box‬‬
‫‪ ،‬موز در دست میمون است )‪ (has got‬یا خیر )‪(has not‬‬
‫برای مثال‪ :‬حالت اولیه را در پرولوگ به صورت زیر می توان نوشت‬
‫( ‪horizontal‬‬
‫• )‪state(atdoor, onfloor, atwindow, hasnot‬‬
‫• تغییر حالت ها پس از یک جابجایی مشخص می تواند به صورت زیر بیان شود‪:‬‬
‫)‪• move(State1,Move, State2‬‬
‫• ‪، State1‬وضعیت قبل از جابجایی است‪.‬‬
‫• ‪ Move‬جابجایی انجام گرفته است‪.‬‬
‫• ‪ ،State2‬وضعیت پس از جابجایی است‪.‬‬
‫‪26‬‬
‫فرموله بندی مسئله‬
‫• به دست آوردن موز‪:‬‬
‫‪move(state(middle, onbox, middle, hasnot), grasp, state(middle,‬‬
‫))‪onbox, middle, has‬‬
‫• پس از این تغییر حالت میمون به موز دست پیدا کرده و برروی جعبه در وسط اتاق باقی‬
‫مانده است‪.‬‬
‫‪move(state(Pos1,onfloor, Box,Has), walk(Pos1,Pos2), state(Pos2,‬‬
‫))‪onfloor, Box, Has‬‬
‫•‬
‫این تغییرحالت باعث می شود میمون از موقعیت ‪ Pos1‬به سمت موقعیت ‪ Pos2‬جابجا شود (راه برود)‪.‬‬
‫• میمون پیش و پس از این جابجایی‪ ،‬برروی زمین قرار دارد‪.‬‬
‫• جعبه در موقعیت ‪ Box‬قرار دارد و پس از جابجایی میمون همچنان در همان موقعیت می‬
‫ماند‪.‬‬
‫• پس از جابجایی‪ ،‬میمون همچنان موز را در اختیار دارد )‪.(Has status‬‬
‫‪27‬‬
‫فرموله بندی مسئله‬
‫• پرس و جوی ما به صورت )‪ canget(State‬بیان می شود‪ .‬برای هر حالت‪ ،‬اگر میمون به‬
‫موز دست پیدا کرده باشد‪ ،‬گزاره )·(‪canget‬درست )‪ (true‬خواهد بود‪:‬‬
‫‪• canget(state( , , , has)).‬‬
‫• در سایر حالتها به یک یا بیشتر جابجایی نیاز داریم تا میمون به موز برسد‪:‬‬
‫‪• canget(State1) : −move(State1,Move, State2), canget(State2).‬‬
‫‪28‬‬
‫بیان مسئله با استفاده از پرولوگ‬
move(state(middle,onbox,middle,hasnot), % before move
grasp,
% grap banana
state(middle,onbox,middle,has)).% After move
move(state(P,onfloor,P,H),
climb,
% climb box
state(P,onbox,P,H)).
move(state(P1,onfloor,P1,H),
push(P1,P2),
% push box from P1 to P2
state(P2,onfloor,P2,H)).
move(state(P1,onfloor,B,H),
walk(P1,P2),
state(P2,onfloor, B,H)).
canget(state(_,_,_,has)).
% can 1: Monkey already has it
canget(State1):% do somework to get it
move(State1,Move,State2),
% do something
canget(State2).
% Get it now
?- canget(state(atdoor,onfloor,atwindow,hasnot)). => Yes
29
‫لیستها‬
‫• یک لیست یا تهی است یا از دو بخش تشکیل می شود‪ :‬یک سر‬
‫یک تالی )‪ .(tail‬تالی خود می تواند یک لیست باشد‪.‬‬
‫• به صورتهای زیر نشان داده می شود‪:‬‬
‫)‪ (head‬و‬
‫] · · · ‪[Item1, Item2,‬‬
‫]‪[Head|Tail‬‬
‫]‪[Item1, Item2, · · · |Others‬‬
‫]][|‪E.g.: [a, b, c] = [a|[b, c]] = [a, b|[c]] = [a, b, c‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫• اشیا می توانند به صورت لیست بیان شوند‪:‬‬
‫]]] ‪• [[a, b], c, [d, [e, f‬‬
‫‪30‬‬
List::Membership ‫عضویت در لیست‬
:‫ است اگر‬L ‫ عضوی از لیست‬X •
‫ باشد یا‬L ‫ در سر‬X –
.‫ باشد‬L ‫ عضوی از تالی‬X –
• member(X, [X|Tail]).
• member(X, [Head|Tail]) :-member(X, Tail).
:‫• مثال‬
• ?-member(a, [b, c, a]).
• ?-member(a, [b, [c, a]]).
• ?-member(X, [b, [c, a]]).
31
‫اضافه کردن به لیست‬
‫• قرار دادن آیتم جدید در ابتدای لیست به طوری که سر جدید‬
‫لیست شود‪:‬‬
‫‪• add(X, L, [X|L]).‬‬
‫‪32‬‬
‫حذف از لیست‬
‫• )‪ del(X, L, L1‬به طوری که لیست ‪ L1‬مساوی لیست ‪ L‬بدون‬
‫آیتم ‪ X‬است‪.‬‬
‫• اگر ‪ X‬سر لیست باشد‪ ،‬آنچه پس از حذف می ماند‪ ،‬تالی لیست‬
‫است‪.‬‬
‫• اگر ‪ X‬در تالی لیست باشد‪ ،‬حذف از قسمت تالی انجام می شود‪.‬‬
‫‪• del(X, [X|Tail], Tail).‬‬
‫‪• del(X, [Y|Tail], [Y|Tail1]) :-del(X, Tail, Tail1).‬‬
‫‪33‬‬
‫خالصه عملیات برروی لیستها‬
•
Checking some objects is an element of a list -> member
•
•
•
Concatenation -> conc(L1,L2,L3).
•
•
del(a,[a,b,c],L). => L=[b,c]
sublist => sublist(S,L).
•
•
add(a,[b,c],L) => L=[a,b,c]
Deleting Item => del(X,L,L1).
•
•
conc([a,b,c],[1,2,3],L).=> L = [a,b,c,1,2,3]
Adding item into list => add(X,L,L3).
•
•
e.g member(b,[a,b,c]). => true
member(b,[a,[b,c]]). => false
Sublist(a,[a,b,c]) => true
Permuntation => permutation(L,P).
•
Permutation([a,b],P). => P = [a,b]; P=[b,a]
34
‫عملیات حسابی‬
‫عملگرهای اولیه حساب در پرولوگ عبارتند از‬
•
.‫‘ برای عبارات حسابی استفاده می شود‬is’ ‫در پرولوگ از عملگر‬
?- X is 5/2, Y is 5//2, Z is 5 mod 2.
X=2.5
Y=2
Z=1
•
+ = addition
- = substraction
* = Mutiplication
/ = division
** = power-‫توان‬
// = integer division
mod = modulo
e.g ?- X=1+2. => X = 1 + 2
?- X is 1 + 2. => X = 3
35
‫عملگرهای مقایسه‬
•
•
•
•
•
•
X > Y => X is greater than Y
X < Y => X is less than Y
X >= Y => X is greater than or equal to Y
X =< Y => X is less than or equal to Y
X =:= Y => the X and Y values are equal
X =\= Y => the X and Y values are not equal
36
‫ارتباط پرولوگ و منطق گزاره ای‬
‫‪37‬‬
‫مسئله مسیرهای به طول ‪1‬و‪ 2‬در گراف‬
‫‪True‬‬
‫‪38‬‬