Prolog Programming In logic هوش مصنوعی symbol ” “ string char integer real می توان نوع جدید (ساختار) تعریف نمود زبان پرولوگ به حروف حساس است .متغیرها با حروف بزرگ شروع می شوند در پرولوگ متغیرها دو وضعیت boundو unboundدارند و فقط یک بار مقدار می گیرند X=3 اگر Xاز قبل مقدار دارد مقایسه می کند و اگر مقدار ندارد انتساب می دهد استنتاج در پرولوگ به صورت backward chaningاست. parent(pam,bob). pam tom parent(tom,bob). parent(tom,liz). parent(bob,ann). bob liz parent(bob,pat). parent(pat,jim). male(tom). male(bob). ann pat male(jim). female(pam). female(ann). jim female(pat). female(liz). predicates Goal: parent(symbol, symbol) parent(bob, pat) Yes male(symbol) parent(bob, jim) No female(symbol) parent(X, pat) X=bob parent(X, ann), parent(X, pat) clauses parent(pam,bob). parent(tom,bob). male(tom). male(bob). female(pat). female(liz). parent(pam, X) X=bob X = bob Goal: X = pat, Y=bob )parent(X, jim), parent(Y,X با 2بار جستجو به جواب می رسد Y=bob, X = jim )parent(Y,X), parent(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) پرولوگ در زمان اجرای دستورات ابتدا واقعیات (اصول موضوعی) را چک می کند و سپس با انجام عمل یکسان سازی بر اساس قوانین پایگاه دانش استنتاج می کند. 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). pa m tom bob ann liz pat jim pa m tom bob ann liz pat jim pa m tom bob ann liz pat jim 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=[ ] L1=[a] L1=[a, b] L1=[a, b, c] L2=[a, b, c] L2=[b, c] L2=[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 L1 ?- sublist( S, [a, b, c]) S= [] S= [a] S= [] S= [b] S= [] S= [c] S= [] S= [a,b] S= [b,c] L3 L2 S= [a,b,c] permutation( [ ], [ ]). permutation( [X|L], P) :- X permutation( L, L1), insert( X, L1, P). 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) 5. translate(List1, List 2) use 6. flatten(List , FlatList) such as [m, a, d, a, m] such as translate([1 , 2], [one, two]) means(0, zero), means(1, one), … ?- flatten([a,b,[c,d],[ ],[[[e]]],f],L) L= [a,b,c,d,e,f]
© Copyright 2024 Paperzz