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

30
وگ ل رو پ ی س ی و ن ه م ا رن پ ان ن زProgramming In logic Prolog ی ع و ن ص م وش ه

Upload: steven-stoner

Post on 14-Dec-2015

228 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

زبان برنامه نویسی پرولوگProgramming In logic

Prolog

هوش مصنوعی

Page 2: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

symbol

string ” “

char

integer

real

می توان نوع جدید )ساختار( تعریف نمود

انواع داده در پرولوگ

متغیرها با حروف بزرگ شروع می زبان پرولوگ به حروف حساس است.

شوند

دارند و فقط یک بار unbound و boundدر پرولوگ متغیرها دو وضعیت

مقدار می گیرند

X = 3

از قبل مقدار دارد مقایسه می کند و اگر مقدار ندارد انتساب می دهدXاگر

است.backward chaningاستنتاج در پرولوگ به صورت

Page 3: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

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

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).

Page 4: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

مسند )محمول( در پرولوگ

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

Page 5: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

نحوه اجرای دستورات در پرولوگ

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 ویرایش

Page 6: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

انواع داده در پرولوگ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)

Page 7: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

Unificationیکسان سازی

واقعی]ات ابت]دا اج]رای دس]تورات در زم]ان پرول]وگ

)اص]ول موض]وعی( را چ]ک می کن]د و س]پس ب]ا انج]ام

عم]ل یکس]ان س]ازی ب]ر اس]اس ق]وانین پایگ]اه دانش

predicatesاستنتاج می کند.

offspring(symbol,symbol) فرزند

mother(symbol,symbol)

clauses

offspring(pat, bob)

mother(X,Y) :- parent(X,Y) , female(X).

Page 8: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

ادامه رابطه خویشاوندی

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.

Page 9: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

ادامه رابطه خویشاوندی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).

Page 10: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

ادامه رابطه خویشاوندی

pam

jim

patann

bob liz

tom

Page 11: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

ادامه رابطه خویشاوندی

pam

jim

patann

bob liz

tom

Page 12: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

ادامه رابطه خویشاوندی

pam

jim

patann

bob liz

tom

Page 13: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

نمايش درختي مدارات الكتريكي

Page 14: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

نمايش درختي مدارات الكتريكي

Page 15: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

نمايش درختي خط و مثلث

Page 16: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

نمايش درختي خط و مثلث

Page 17: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

AI

ليست ها

LISTS

Page 18: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

نمايش درختي ليست

[ann, tennis, tom, skiing]

Page 19: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

رابطه عضویت و ادغامmember(X , [X | L]).member(X , [Head | Tail]) :- member(X , Tail).

conc([ ] , L , L).conc([X | L1] , L2 , [X | L3]) :- con(L1 , L2 , L3).

Page 20: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

رابطه ادغام?- 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]

Page 21: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

رابطه ادغام

?- conc(_ , [Month1, may ,Month2 | _], [jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec]).

Month1 = aprMonth2 = jun

Page 22: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

member1(X, L) :- conc (L1, [X|L2] , L).

رابطه عضویت با استفاده از ادغام

L1 X L2

[X|L2]

L

Page 23: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

رابطه عضویت با استفاده از ادغام

Page 24: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

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]

اضافه به و حذف از لیست

Page 25: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

مثال:?- 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, _).

درج

Page 26: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

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= []

Page 27: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

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]

Page 28: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

permutation2( [ ], [ ]).permutation2( L, [X|P]) :- del ( X, L, L1),

permutation ( L1, P).

جایگشت

Page 29: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

reverse( [ ], [ ]) .reverse( [X|Tail], L) :- reverse (Tail, L1),

conc (L1, [X] , L).

لیست معکوس

Page 30: Programming In logic Prolog هوش مصنوعی. symbol string” “ char integer real می توان نوع جدید ( ساختار ) تعریف نمود زبان پرولوگ به

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]

تمرين