رابطه خویشاوندی در پرولوگ
Download
Report
Transcript رابطه خویشاوندی در پرولوگ
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]