programming in logic prolog هوش مصنوعی. symbol string” “ char integer real می...

Post on 14-Dec-2015

228 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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]

تمرين

top related