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