نمايش پست تنها
قديمي ۰۶-۱۷-۱۳۸۸, ۰۵:۲۴ بعد از ظهر   #13 (لینک دائم)
Astaraki Female
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,337 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Post Visual Prolog Version 5.x

مرور:
1- زبان پرولوگ بر اساس دو مفهوم اصلی fact و rule بنا نهاده شده است:
• Fact : یک رابطه یا یک خاصیت که شما می دانید صحیح است و یا به عبارت ساده تر چیزی که شما از وجودش مطمعن هستید.برای مثال bill بازی baseball را دوست دارد . در واقع دانش شما از مساله همین fact است.
• Rule : قوانین ارتباطی هستند که به پرولوگ اجازه می دهند بوسیله یک قسمت از اطلاعات ،اطلاعات دیگر را استنباط کنند.شما ازطریق این قوانین میتوانید از دانش های موجود ،اطلاعات دیگری را استنباط نمایید.
2- فاکت ها عموما بصورت زیر نوشته می شوند:
کد:

property(object1, object2, ..., objectN)

یا
کد:

relation(object1, object2, ..., objectN)

property یک خصوصیت از آبجکته می تواند باشد و relation هم می تواند ارتباط بین آبجکتها باشد.

3-هر فاکت در برنامه از یک ارتباط دهنده و یک یا بیشتر آبجکت تشکیل شده است و یا از یک خصوصیت و یک یا بیشتر خصوصیت تشکیل شده است برای مثال:
کد:

likes(tom, baseball).

like یک ارتباط دهنده بین دو آبجکت tom و baseball است.
عبارت زیر هم یک فاکت است
کد:

left_handed(benjamin)

left_handed یک خصوصیت و Benjamin یک آبجکت است. به عبارت ساده تر و به زبان طبیعی، بنجامین چپ دست است.

4- فرم عمومی رول بصورت Head:-Body است
کد:

relation(object,object,...,object):-
relation(object,...,object),
.
.
relation(object,...,object).

5- شما در انتخاب نام های ارتباطی و آبجکتها اختیار عمل دارید.موارد محدود کننده عبارت اند از:
• نام آبجکت باید با حروف کوچک شروع شود و بدنبال آن هر عدد و حرف کوچک و یا بزرگ و یا under score می تواند بیاید.
• خصوصیت ارتباطی باید با حروف کوچک آغاز شود و بدنبال آن هر عدد و حرف کوچک و یا بزرگ و یا under score می تواند بیاید.
6- پریدیکیت نام سمبلیکی از ارتباط های بین آرگومانها است.
7- متغیر ها شما را قادر می سازند که پرسش ها و فاکت ها و رولهای عمومی بسازید.
• نام یک متغیر باید با حروف بزرگ ایجاد گردد و یا فقط یک under Score باشد و بدنبال آن هر عدد و حرف کوچک و یا بزرگ و یا under score می تواند بیاید.
• متغیرها مقدار خود را با تطبیق در فاکت ها و رولها می گیرند.تا زمانی که متغیر ،مقداری را نپذیرفته است اصلاحا گفته می شود که آزاد است و با گرفتن مقدار گفته می شود که مقید شده است.
• شما نمی توانید اطلاعات سراسری خود را در متغیر در هنگام ایجاد متغیر ،ذخیره نمایید.متغیر در روند اجرایی برنامه مقید خواهد شد.
8- اگر شما به اطلاعات معینی از پرسش هانیاز داشته باشید می توانید از متغیر های بی نام استفاده نمایید.در پرولوگ متغیر بی نام با یک under score تکی نمایش داده می شود.
متغیر بی نام هر گز مقدار نمی پذیرد.
9-جهت حرکت پرولوگ در حل مسایل همیشه از بالا به پایین است.وقتی پرولوگ می خواهد یک برنامه را اجرا نماید همیشه از بالاترین و اولین فاکت برنامه شروع به حل برنامه می نماید.
10- goal های مرکب از دو یا بیشتر بخش تشکیل شده اند.هر بخش یک goal مرکب را subgoal می گویند.goal های مرکب می توانند از ترکیب عطفی و یا ترکیب فصلی استفاده نمایند.
11- توضیحات برنامه شما را خواناتر می کنند.شما می توانید با در میان قراردادن عبارات توضیحی خود در بین /* */ و یا // به خونایی هرچه بیشتر برنامه خود کمک کنید.

برنامه نویسی در پرولوگ:
عموماً برنامه نویسی ویژوال پرولوگ از چهار بخش برنامه نویسی تشکیل یافته است.این بخشها عبارت اند از :بخش Clauses،بخش Predicates،بخش Domains و بخش Goal.
بخش Clauses قلب برنامه نویسی پرولوگ است،در این بخش Fact ها و Rule ها را وارد می نماییم.در واقع نتیجه گیری های داخل Goal به این قسمت وابسته است.
Predicates: در این بخش predicate هایی را که می خواهیم ،در این قسمت وارد می کنیم.این قسمت می تواند به domain ها هم وابسته باشد.
Domains: در این قسمت می توان دامنه های را تعریف کرد که در استاندارد ویژوال پرولوگ نمی باشند.
Goal: در این قسمت اهداف ما،یا در واقع سولاتی را که از سیستم داریم و نتیجه اش را می خواهیم بدانیم،می پرسیم.

بخش Clauses:
در این بخش فاکت های ها و رول های که در برنامه می خواهید داشته باشید،وارد می نمایید.
اگر شما بفهمید که فاکت و رول چیست و در واقع مفهوم آنها را درک کنید،ضرورت استفاده از Clauses نیز برای شما قابل فهم خواهد شد.
یک رشته از پریدیکیت ها که در Clauses تعریف می شود را پروسیجر می گویند.
وقتی ما در برنامه سعی در حل برنامه از طریق Goal می کنیم،در این موقع ویژوال پرولوگ شروع به نگاه کردن فاکت هاا و رولهای های داخل Clauses ،از بالا به پایین می کند.در واقع به دنبال چیزی می گردد که بتواند با محتویات Goal آن را تطبیق دهد(match).اگر چیزی که در حال حاضر با آن کار می کند جزء جواب ما نباشد ، در واقع با آن کاری نداریم و در این حالت اشاره گر به قسمت بعدی فرستاده می شود.به این عمل Backtracking یا بازگشت به عقب می گویند که در بخشهای بعدی مورد بررسی قرار می گیرد.

بخش Predicates:
چیزهایی را که در Clauses استفاده می کنیم به این بخش وابستگی دارند.اگر بدون تعریف در Predicate ،سعی به استفاده از فاکت ها و رولها ها کنیم،در این حالت برنامه نمی فهمد که در باره چه چیزی داریم سوال می کنیم.در این قسمت تعریف نوع انجام می شود.این تعریف نوع جزء اساسی برنامه نویسی پرولوگ می باشد.

چگونگی تعریف داده های کاربر
(user-defined) در Predicates:
تعریف یک پریدیکیت با نام پریدیکیت شروع می شود و در ادامه یک پرانتز باز و سپس نام آرگومانها (که از طول صفر تا ... می باشد) و د رآخر پرانتز بسته قرار می گیرد.مابین هر دو آرگومان(حد فاصل دو آرگومان)یک (،) قرار می گیرد.
نام یک آرگومان باید با حروف کوچک شروع شود و دنباله آن می تواند حروف کوچک،اعدادو یا Underscore باشد.

predicateName(argument_type1, argument_type2, ..., argument_typeN)

نام یک پریدیکیت می تواند تا 250 کارکتر طول داشته باشد.امکان استفاده از Space،-،/ و یا حروفی که جزء کارکتر های الفبایی اصلی نیستند ، وجود ندارد.
کارکتر های که می توان از آنها در تعریف پریدیکیت استفاده نمود عبارت اند از:
کد:

حروف بزرگ انگلیسی A,B,C,D,…,Z
حروف کوچک انگلیسی a,b,c,d,…,z
اعداد 0,1,2,…,9
زیرخط Underscore(_)

در زیر مثالی از نامهای پریدیکیت معتبر و نا معتبر آورده شده است.
کد:

معتبر نا معتبر
[fact] fact
*is_a* is_a
has/a has_a
Pattern-check-list pattern_check_list

آرگومانهای موجود در پریدیکیت باید در دامنه ویژوال پرولوگ شناخته شده باشند.این دامنه می تواند یک دامنه استاندارد باشد و یا یک دامنه تعریف شده توسط کاربر باشد.
کد:

PREDICATES
my_predicate(symbol,integer)

در تعریف بالا یک نوع تعریف سیستمی می باشد.نیازی به تعریف Domain در بالا ندارید.اگر تعریف پریدیکیت از نوع کاربری باشد آنگاه باید Domain را برای آن تعریف کرد.مثال زیر از تعریف نوع کاربر است:
کد:

Domains
name=symbol
number=integer
PREDICATES
my_pricates(name,number)

مثال زیر برای درک مفاهیم ذکر شده در بالا مناسب می باشد:
کد:

DOMAINS
person, activity = symbol
car, make, color = symbol
mileage, years_on_road, cost = integer
PREDICATES
likes(person, activity)
parent(person, person)
can_buy(person, car)
car(make, mileage, years_on_road, color, cost)
green(symbol)
ranking(symbol, integer)

در مثال بالا پریدیکیت likes دارای دو آرگومان است،که هر دو در domain تعریف شده اند و با symbol ،تعریف نوع شده اند.
پریدیکیت parent با دو آرگومان person تعریف شده است که نوع ارگومان person از نوع symbol است.
پردیکیت can_buy نیز دارای دو آرگومان است که هر دو از نوع symbol هستند و در domain تعریف شده اند.
پردیکیت car از پنج آرگومان تشکیل شده است که این آرگومانها، color از نوع symbol و mileage ،years_on_road،cost وmake از نوع integer می باشند.
پردیکیت green از یک آرگومان تعریف شده است که آن هم از نوع symbol است و نیازی به تعریف آن در Domain نیست چون بصورت استاندارد تعریف شده است.
در پردیکیت ranking از دونوع آرگومان استفاده شده است که باز در اینجا نیاز به تعریف در Domain نیست چون بصورت استاندارد تعریف شده است.نوع آرگومانهای بکار رفته در این پریدیکیت از نوع symbol و integer است.
Astaraki آفلاين است   پاسخ با نقل قول