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

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

Upload: hallam

Post on 22-Feb-2016

121 views

Category:

Documents


1 download

DESCRIPTION

زبان برنامه نویسی پرولوگ. Prolog. Programming In logic. هوش مصنوعی. انواع داده در پرولوگ. symbol string ” “ char integer real می توان نوع جدید (ساختار) تعریف نمود. زبان پرولوگ به حروف حساس است.متغیرها با حروف بزرگ شروع می شوند - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: زبان برنامه نویسی پرولوگ

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

Prolog

هوش مصنوعی

Page 2: زبان برنامه نویسی پرولوگ

symbol string ” “ char integer real می توان نوع جدید )ساختار( تعریف نمود

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

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

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

X = 3

از قبل مقدار دارد مقایسه می کند و اگر مقدار ندارد انتساب می دهدXاگر است.backward chaningاستنتاج در پرولوگ به صورت

Page 3: زبان برنامه نویسی پرولوگ

رابطه خویشاوندی در پرولوگ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: زبان برنامه نویسی پرولوگ

مسند )محمول( در پرولوگ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: زبان برنامه نویسی پرولوگ

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

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: زبان برنامه نویسی پرولوگ

انواع داده در پرولوگ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: زبان برنامه نویسی پرولوگ

Unificationیکسان سازی واقعیات ابتدا دستورات اجرای زمان در پرولوگ )اص?ول موضوع?ی( را چ?ک م?ی کن?د و س?پس با انجام عم?ل یکس?ان س?ازی بر اس?اس قوانی?ن پایگاه دانش

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

offspring(symbol,symbol) فرزندmother(symbol,symbol)

clauses

offspring(pat, bob)

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

Page 8: زبان برنامه نویسی پرولوگ

ادامه رابطه خویشاوندی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: زبان برنامه نویسی پرولوگ

ادامه رابطه خویشاوندی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: زبان برنامه نویسی پرولوگ

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

pam

jim

patann

bob liz

tom

Page 11: زبان برنامه نویسی پرولوگ

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

pam

jim

patann

bob liz

tom

Page 12: زبان برنامه نویسی پرولوگ

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

pam

jim

patann

bob liz

tom

Page 13: زبان برنامه نویسی پرولوگ

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

Page 14: زبان برنامه نویسی پرولوگ

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

Page 15: زبان برنامه نویسی پرولوگ

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

Page 16: زبان برنامه نویسی پرولوگ

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

Page 17: زبان برنامه نویسی پرولوگ

AI

ليست ها

LISTS

Page 18: زبان برنامه نویسی پرولوگ

نمايش درختي ليست[ann, tennis, tom, skiing]

Page 19: زبان برنامه نویسی پرولوگ

رابطه عضویت و ادغام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: زبان برنامه نویسی پرولوگ

رابطه ادغام?- 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: زبان برنامه نویسی پرولوگ

رابطه ادغام

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

Month1 = aprMonth2 = jun

Page 22: زبان برنامه نویسی پرولوگ

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

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

L1 X L2

[X|L2]

L

Page 23: زبان برنامه نویسی پرولوگ

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

Page 24: زبان برنامه نویسی پرولوگ

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: زبان برنامه نویسی پرولوگ

مثال:?- 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: زبان برنامه نویسی پرولوگ

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: زبان برنامه نویسی پرولوگ

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: زبان برنامه نویسی پرولوگ

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

permutation ( L1, P).

جایگشت

Page 29: زبان برنامه نویسی پرولوگ

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

conc (L1, [X] , L).

لیست معکوس

Page 30: زبان برنامه نویسی پرولوگ

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]

تمرين