310 likes | 652 Views
زبان برنامه نویسی پرولوگ. Prolog. Programming In logic. هوش مصنوعی. انواع داده در پرولوگ. symbol string ” “ char integer real می توان نوع جدید (ساختار) تعریف نمود. زبان پرولوگ به حروف حساس است. متغیرها با حروف بزرگ شروع می شوند
E N D
زبان برنامه نویسی پرولوگ Prolog Programming In logic هوش مصنوعی
انواع داده در پرولوگ • symbol • string ” “ • char • integer • real • می توان نوع جدید (ساختار) تعریف نمود زبان پرولوگ به حروف حساس است. متغیرها با حروف بزرگ شروع می شوند در پرولوگ متغیرها دو وضعیت bound و unbound دارند و فقط یک بار مقدار می گیرند X = 3 اگر X از قبل مقدار دارد مقایسه می کند و اگر مقدار ندارد انتساب می دهد استنتاج در پرولوگ به صورت backward chaning است.
رابطه خویشاوندی در پرولوگ 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). pam tom bob liz ann pat jim
مسند (محمول) در پرولوگ 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 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(X, jim), parent(Y,X) X = pat, Y=bob با 2 بار جستجو به جواب می رسد parent(Y,X), parent(X, jim) Y=bob, X = jim برای هر Y باید تمامی موارد X چک شود از دید منطقی دو دستور فرقی ندارند اما از دید روالی نحوه اجرای دستورات مهم است 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 tom bob liz ann pat jim
ادامه رابطه خویشاوندی pam tom bob liz ann pat jim
ادامه رابطه خویشاوندی pam tom bob liz ann pat jim
ليست ها 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 = apr Month2 = jun
رابطه عضویت با استفاده از ادغام member1(X, L) :- conc (L1, [X|L2] , L). L L1 X L2 [X|L2]
اضافه به و حذف از لیست 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). L S L3 L1 ?- 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= [] L2
جایگشت permutation( [ ], [ ]). permutation( [X|L], P) :- permutation( L, L1), insert( X, L1, P). X L permute L L2 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]