رابطه خویشاوندی در پرولوگ

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]