programming in logic prolog هوش مصنوعی. symbol string” “ char integer real می...
TRANSCRIPT
زبان برنامه نویسی پرولوگProgramming In logic
Prolog
هوش مصنوعی
symbol
string ” “
char
integer
real
می توان نوع جدید )ساختار( تعریف نمود
انواع داده در پرولوگ
متغیرها با حروف بزرگ شروع می زبان پرولوگ به حروف حساس است.
شوند
دارند و فقط یک بار unbound و boundدر پرولوگ متغیرها دو وضعیت
مقدار می گیرند
X = 3
از قبل مقدار دارد مقایسه می کند و اگر مقدار ندارد انتساب می دهدXاگر
است.backward chaningاستنتاج در پرولوگ به صورت
رابطه خویشاوندی در پرولوگ
pam
jim
patann
bob liz
tom
parent(pam,bob).
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
male(tom).
male(bob).
male(jim).
female(pam).
female(ann).
female(pat).
female(liz).
مسند )محمول( در پرولوگ
predicates
parent(symbol, symbol)
male(symbol)
female(symbol)
clauses
parent(pam,bob).
parent(tom,bob).
male(tom).
male(bob).
female(pat).
female(liz).
Goal:
parent(bob, pat) Yes
parent(bob, jim) No
parent(X, pat) X=bob
parent(X, ann), parent(X, pat) X=bob
parent(pam, X) X = bob
نحوه اجرای دستورات در پرولوگ
Goal:
parent(X, jim), parent(Y,X) X = pat, Y=bob
بار جستجو به جواب می رسد2با
parent(Y,X), parent(X, jim) Y=bob, X = jim
چک شودX باید تمامی موارد Yبرای هر
از دید منطقی دو دستور فرقی ندارند اما از دید روالی نحوه اجرای دستورات مهم
است
Alt + R اجرا
Alt + E ویرایش
انواع داده در پرولوگdomains
datatype = date(integer, symbol, integer)
predicates
birth(symbol, datatype)
clauses
birth(ali, date(1990, september,20)).
birth(ali, date(1992, july,20)).
birth(ahmad, date(1990, october,12)).
Goal: birth(ahmad, X).
X=date(1990, october,12)
Unificationیکسان سازی
واقعی]ات ابت]دا اج]رای دس]تورات در زم]ان پرول]وگ
)اص]ول موض]وعی( را چ]ک می کن]د و س]پس ب]ا انج]ام
عم]ل یکس]ان س]ازی ب]ر اس]اس ق]وانین پایگ]اه دانش
predicatesاستنتاج می کند.
offspring(symbol,symbol) فرزند
mother(symbol,symbol)
clauses
offspring(pat, bob)
mother(X,Y) :- parent(X,Y) , female(X).
ادامه رابطه خویشاوندی
predicates
sister(symbol,symbol)
clauses
sister(X,Y) :- parent(Z, X) , parent(Z,Y), female(X).
Goal: sister(liz, X)
X= bob
X= liz
sister(X,Y) :- parent(Z, X) , parent(Z,Y), female(X) , X<>Y.
ادامه رابطه خویشاوندیpredicates
grandparent(symbol,symbol)
clauses
grandparent (X,Y) :- parent(X, Z) , parent(Z,Y).
تابع بازگشتیpredicates
predecessor(symbol,symbol)
clauses
predecessor(X,Y) :- parent(X, Y).
predecessor(X,Y) :- parent(Z, Y), predecessor(X,Z).
ادامه رابطه خویشاوندی
pam
jim
patann
bob liz
tom
ادامه رابطه خویشاوندی
pam
jim
patann
bob liz
tom
ادامه رابطه خویشاوندی
pam
jim
patann
bob liz
tom
نمايش درختي مدارات الكتريكي
نمايش درختي مدارات الكتريكي
نمايش درختي خط و مثلث
نمايش درختي خط و مثلث
AI
ليست ها
LISTS
نمايش درختي ليست
[ann, tennis, tom, skiing]
رابطه عضویت و ادغامmember(X , [X | L]).member(X , [Head | Tail]) :- member(X , Tail).
conc([ ] , L , L).conc([X | L1] , L2 , [X | L3]) :- con(L1 , L2 , L3).
رابطه ادغام?- conc(L1 , L2 , [a, b, c]).
L1=[ ] L2=[a, b, c]L1=[a] L2=[b, c]L1=[a, b] L2=[c]L1=[a, b, c] L2=[ ]
?- conc(Before , [may | After], [jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec]).
Before = [jan,feb,mar,apr]After = [jun,jul,aug,sep,oct,nov,dec]
رابطه ادغام
?- conc(_ , [Month1, may ,Month2 | _], [jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec]).
Month1 = aprMonth2 = jun
member1(X, L) :- conc (L1, [X|L2] , L).
رابطه عضویت با استفاده از ادغام
L1 X L2
[X|L2]
L
رابطه عضویت با استفاده از ادغام
add( X, L, [X|L]).
del( X, [X|Tail], Tail).del( X, [Y|Tail], [Y|Tail1]) :- del( X, Tail, Tail1).
مثال:?- del( a, [a, b, a, a], L).
L = [b, a, a]L = [a, b, a]L = [a, b, a]
اضافه به و حذف از لیست
مثال:?- del( a, L, [m, n, p]).
L = [a, m, n, p]L = [m, a, n, p]L = [m, n, a, p]L = [m, n, p, a]
insert(X, List, BiggerList) :- del( X, BiggerList, List).
delرابطه عضویت با استفاده از member2(X, List) :- del ( X , List, _).
درج
sublist( S, L) :- conc( L1, L2 , L),conc( S, L3, L2).
زیر لیست
L1
L2
L
S L3
?- sublist( S, [a, b, c])
S= [] S= [a] S= [a,b] S= [a,b,c]S= [] S= [b] S= [b,c]S= [] S= [c]S= []
permutation( [ ], [ ]).permutation( [X|L], P) :- permutation( L, L1),
insert( X, L1, P).
جایگشت
X L
L2
permute L
L1 L1 is a permutation of L
Insert X obtaining a permutation of [X | L]
permutation2( [ ], [ ]).permutation2( L, [X|P]) :- del ( X, L, L1),
permutation ( L1, P).
جایگشت
reverse( [ ], [ ]) .reverse( [X|Tail], L) :- reverse (Tail, L1),
conc (L1, [X] , L).
لیست معکوس
1. evenlength(List)2. oddlength(List)3. shift (L1, L2)4. palindrome(List) such as [m, a, d, a, m]5. translate(List1, List 2) such as translate([1 , 2], [one, two])
use means(0, zero), means(1, one), …6. flatten(List , FlatList)
?- flatten([a,b,[c,d],[ ],[[[e]]],f],L)L= [a,b,c,d,e,f]
تمرين