Presentation1 - دانشگاه حکیم سبزواری

Download Report

Transcript Presentation1 - دانشگاه حکیم سبزواری

‫الرحیم‬
‫آموزش نرم افزار ‪CLIPS‬‬
‫حمیدرضا رخصتی‬
‫دانشگاه حکیم سبزواری‬
‫پاییز‪93-‬‬
‫مقدمه‬
‫سیستم خبره یک برنامه کامپیوتری هوشمند است که از دانش و روش های استنتاج‬
‫برای حل مسائلی کمک می کند که بدلیل مشکل بودن نیاز به تجربه و مهارت انسان‬
‫دارد‪ .‬این سیستم (شکل داخل دایره) یک واقعیت (‪ )Fact‬را از بیرون سیستم دریافت‬
‫می کند و با توجه به آن واقعیت با پاسخ و راه حل مناسب (خبرگی) را به عنوان‬
‫خروجی می دهد‪ .‬اسن سیستم در حالت کلی از دو قسمت تشکیل شده است‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫پایگاه دانش ()‪)Knowledge Base(KB‬‬
‫موتور استنتاج ()‪)Inference Engine(IE‬‬
‫•‬
‫واقعیت (‪)Fact‬‬
‫واقعیات در واقع همان اطالعاتی است که به عنوان ورودی به سیستم خبره داده می‬
‫شود‪.‬‬
‫قواعد (‪)Rule‬‬
‫ساختار دانشی است که یعنی اطالعات دانسته به اطالعات دیگری می تواند به‬
‫معلومات قبلی اضافه یا دانسته فرض شوند‪.‬‬
‫ساختار این قاعده یک یا چند پیش فرض در قسمت “اگر” را با نتیجه گیری ها در‬
‫قسمت “آنگاه” مرتبط می سازد‪ .‬یک قاعده می تواند در غیر “در غیر اینصورت” هم‬
‫داشته باشد‪.‬‬
‫در واقع قاعده ساختاری است که با برقرار شدن الگو ”‪ “Pattern‬قسمت عمل ”‪“Action‬‬
‫اجرا می شود که اگر این ‪ Action‬خودش معادل یک ‪ Pattern‬دیگر شود‪ ،‬عمل مربوط به‬
‫آن اجرا می شود و به همین ترتیب تا آخر پیدا خواهد کرد‪.‬‬
‫•‬
‫دراین مثال واقعیات (‪ )Facts‬در حافظه کاری و قواعد )‪ (Rules‬در پایگاه دانش‬
‫قرار دارند‪ .‬قاعده ‪ Rule1‬اجرا می شود و قسمت الگوی آن با ‪ Fact1‬تطبیق دارد‬
‫یعنی (‪ )Ball’s Color Is Red‬پس چون قسمت الگو با ‪ Fact1‬تطبیق داشت‪،‬‬
‫قسمت عمل ‪ Rule1‬یعنی ‪ I Like It‬انجام می شود‪ .‬سپس ‪ Rule2‬اجرا می‬
‫شود‪ .‬چون الگوی آن با ‪ Fact2‬که این قسمت توسط عمل ‪ Rule1‬یعنی‬
‫)‪ (I Like It‬ساخته شده است تطبیق دارد‪ ،‬قسمت عمل ‪ Rule2‬یعنی ‪I will Buy‬‬
‫‪ It‬اجرا می شود‪.‬‬
‫نرم افزار ‪CLIPS‬‬
‫مورد استفاده برای ساخت سیستم های خبره‬
‫برخی از ویژگی های نرم افزار به شرح زیر می باشد‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫از سر نام های عبارات ‪ C Language Implementation Production System‬گرفته شده است‪.‬‬
‫برای اولین بار توسط ‪ NASA‬در واحد فناوری نرم افزار تولید شده است‪.‬‬
‫این نرم افزار رایگان بوده و در حال حاضر نسخه ‪ 6.3‬آن موجود می باشد‪.‬‬
‫این نرم افزار بر روی سیستم عامل های متفاوت مانند ویندوز‪ ،‬لینوکس‪ ،‬مک نصب می گردد‪.‬‬
‫این نرم افزار با استفاده از زبان ‪ C‬ساخته شده است‪.‬‬
‫این نرم افزار چند کاره می باشد‪ .‬یعنی می تواند بصورت مدل های زیر با آن برنامه نویسی کنید‪:‬‬
‫‪ .1‬بر مبنای قواعد (‪)Rule-based‬‬
‫•‬
‫‪ .2‬بر مبنای شی گرایی )‪(Object-oriented‬‬
‫نرم افزار کلیپس فقط قواعد زنجیره ای پیشرو را پشتیبانی می کند‪.‬‬
‫نصب نرم افزار ‪CLIPS‬‬
‫• منوهای نرم افزار ‪CLIPS‬‬
‫منوی ‪:File‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪ :New‬ایجاد یک فایل جدید‬
‫‪ :Save‬ذخیره فایل‬
‫‪ :Open‬باز نمودن فایلی که قبال ایجاد و یا ذخیره شده است‪.‬‬
‫‪ :Load‬فراخوانی یا بارگذاری برنامه‬
‫‪ :Close‬بستن فایل جاری‬
‫‪ :Print‬چاپ دستورات‬
‫‪ :Exit‬خارج شدن و بستن نرم افزار‬
‫منوی ‪:Edit‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪ :Undo‬لغو دستورات انجام شده‬
‫‪ :Cut‬برش زدن متن انتخاب شده‬
‫‪ :Copy‬کپی نمودن متن انتخاب شده‬
‫‪ :Paste‬تکمیل کننده دستورات ‪Copy, Cut‬‬
‫‪ :Delete‬حذف نمودن متن انتخاب شده‬
‫‪ :Select All‬انتخاب کل صفحه‬
‫‪ :Comment‬اعمال توضیحات‬
‫‪ :UnComment‬خارج نمودن از حالت توضیحات‬
‫منوی ‪:Execution‬‬
‫•‬
‫• ‪ :Run‬معادل دستور ‪ Run‬می باشد‪( .‬توضیح داده خواهد شد)‬
‫• ‪ :Step‬معادل دستور ‪ Run1‬می باشد‪( .‬توضیح داده خواهد شد)‬
‫• ‪ :Clear‬معادل دستور ‪ Clear‬می باشد‪( .‬توضیح داده خواهد شد)‬
‫‪ :Reset‬معادل دستور ‪ Reset‬می باشد‪( .‬توضیح داده خواهد شد)‬
‫منوی ‪:Browse‬‬
‫•‬
‫‪ :Defrule Manager‬از این قسمت برای مدیریت (حذف و مشاهده) قواعد (‪)Rules‬‬
‫استفاده می شود‪.‬‬
‫•‬
‫‪ :Deffacts Manager‬از این قسمت برای مدیریت (حذف و مشاهده) واقعیات (‪)Facts‬‬
‫استفاده می شود‪.‬‬
‫•‬
‫‪ :DefTemplate Manager‬از این قسمت برای مدیریت (حذف و مشاهده) الگو‬
‫(‪ )Template‬استفاده می شود‪.‬‬
‫•‬
‫‪ :DefFunction Manager‬از این قسمت برای مدیریت (حذف و مشاهده) توابع‬
‫(‪)Function‬استفاده می شود‪.‬‬
‫منوی ‪:Windows‬‬
‫دستورات این منو برای مشاهده و مدیریت پنجره های نرم افزار بکار می رود‪.‬‬
‫‪‬‬
‫‪ :Agenda Window‬پنجره مربوط به ‪ Agenda‬که قواعد فعال در آن قرار دارد را‬
‫‪ :Fact Window‬پنجره لیست ‪Fact‬ها را نمایش می دهد‪.‬‬
‫نمایش می دهد‪.‬‬
‫نشانه گذاری ها‪:‬‬
‫بعضی از نشانه گذاری ها در گرامر دستورات (‪ )Syntax‬استفاده می شود که‬
‫در این قسمت مقداری از آنها را برای آگاهی بیشتر از‪Syntax‬ها توضیح داده‬
‫می شود‪.‬‬
‫• )‪ :(example‬یعنی ساختار یعنی در داخل پرانتز هر دستور می تواند قرار بگیرد‪.‬‬
‫• )]‪ :(example [1‬دستوراتی که بین ][ قرار دارند یعنی اختیاری هستند‪ .‬در استفاده آنها اجباری نیست‪.‬‬
‫• )>‪ :(example <INTEGER‬دستوراتی که به این سبک نوشته می شوند یعنی دستور یا مقداری جایگزین عبارت‬
‫بین <> می شود‪.‬‬
‫•‬
‫*>‪ :<INTEGER‬زمانی که عالمت * کنار دستوری وجود دارد یعنی تعداد ‪ 0‬یا بیشتر از این دستور می توان‬
‫استفاده کرد‪.‬‬
‫•‬
‫‪ :<INTEGER>+‬زمانی که عالمت ‪ +‬کنار دستوری قرار می گیرد یعنی تعداد ‪ 1‬یا بیشتر از این دستور می توان‬
‫استفاده کرد‪.‬‬
‫•‬
‫‪ :all | none | some‬زمانی که بین دستورات عالمت | باشد بدین معناست که میتوان از هرکدام استفاده کرد‪.‬‬
‫معنی ‪ OR‬می دهد‪.‬‬
‫مولفه های پایه نرم افزار‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫فیلد )‪(Field‬‬
‫واقعیات )‪(Fact‬‬
‫قواعد )‪(Rule‬‬
‫الگو )‪(Template‬‬
‫کالس )‪(Class‬‬
‫فیلدها‪:‬‬
‫برای ساخت پایگاه دانش باید اطالعات از ورودی (صفحه کلید یا فایل) خوانده‬
‫شود سپس دستورات اجرا شوند‪ .‬در طی فرایند اجرای برنامه‪ ،‬نرم افزار کلیپس‬
‫نشانه ها(‪ ،)Symbol‬کاراکترهایی که یک معنی می دهد را با یکدیگر ترکیب و‬
‫گروه بندی می کند و یک توکن می سازد‪ .‬در واقع یک نوع خاصی از توکن می‬
‫باشد‪.‬‬
‫فیلد عددی‪:‬‬
‫دو نوع فیلد عددی وجود دارد‪:‬‬
‫‪‬‬
‫‪‬عدد ممیز شناور (‪ :)Float‬مانند ‪15.02‬‬
‫عدد صحیح (‪ :)Integer‬مانند ‪-32 ، 238‬‬
‫فیلد نشانه ای‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫فیلدهای نشانه ای حاوی کاراکترهای اسکی می باشند‪.‬‬
‫این فیلدها دارای محدودیت هایی می باشند‪.‬‬
‫نشانه در کلیپس حساس به حروف می باشند‪.‬‬
‫نشانه ها نمی توانند با کاراکترهای ؟ و ؟‪ $‬شروع شوند‪ .‬چون این دو کاراکتر‬
‫برای معرفی متغیرها رزرو شده اند‪.‬‬
‫نمونه هایی از نشانه ها‪@ + = - % B76-HI, foo :‬‬
‫محدودیت فیلد نشانه ای‪:‬‬
‫فیلدهای نشانه ای نمی توانند شامل سمبل های زیر باشند‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫کاراکترهای اسکی چاپ نشدنی مانند ‪Space‬‬
‫دابل کوتیشن “ “‬
‫پرانتز باز و بسته ()‬
‫امپرسند &‬
‫خط عمودی |‬
‫عالمت کوچکتر >‬
‫عالمت تیلدا ~‬
‫سمی کولن ;‬
‫فیلد رشته ای‪:‬‬
‫فیلدهای رشته در بین ‪ 2‬دابل کوتیشن ”“ قرار می گیرند‪ .‬تنها محدودیت در این‬
‫فیلدها استفاده از بک اسلش \ می باشد که برای چاپ بک اسلش از \\ و برای‬
‫چاپ “از “ \ استفاده می شود‪ .‬در نمونه هایی آورده شده است‪:‬‬
‫‪‬‬
‫‪“a and b”‬‬
‫‪“a\”quote”‬‬
‫‪“1 number”‬‬
‫”‪“foo‬‬
‫فیلد آدرس‪:‬‬
‫این فیلدها آدرس داده ها را نگه داری می کنند‪ .‬مانند زبان ‪.C‬‬
‫واقعیات (‪)Fact‬‬
‫‪Fact‬ها در واقع واقعیت هایی هستند که کاربر به عنوان ورودی به سیستم خبره می دهد و از سیستم‬
‫خبره‪ ،‬خبرگی دریافت می کنند‪ .‬کلیپس برای حل مسئله ها نیاز به اطالعات و داده ها دارد‪ .‬پایه واحدهای‬
‫داده که در قواعد استفاده می شود همان ‪ Fact‬می باشد‪ .‬هر ‪ Fact‬از قسمت های زیر تشکیل شده‬
‫است‪:‬‬
‫‪ ‬نام واقعیت (‪)Relation name‬‬
‫‪ ‬تعداد صفر یا بیشتر اسالت (‪ )Slot name‬به همراه مقدار )‪(Slot value‬‬
‫ساختار ‪:Deftemplate‬‬
‫با استفاده از این دستور می توان ساختار ‪Fact‬ها را بصورت گروهی ایجاد نمود‪ .‬باید دقت نمود که این‬
‫دستور فقط ساختار اولیه ‪ Fact‬را می سازد و هیچ ‪ Fact‬را ایجاد نمی کند و باید با دستور ‪ Assert‬آن‬
‫ساختار ایجاد شده توسط ‪ Deftemplate‬را مقداردهی نماییم‪.‬‬
‫>‪ :<relation-name‬نام الگو می باشد‪.‬‬
‫>‪ :<optional-comment‬می توان در این قسمت توضیحاتی برای الگو قرار داد‪ .‬این قسمت‬
‫اختیاری می باشد‪.‬‬
‫)>‪ :(slot <slot-name‬این قسمت اجازه می دهد یک فیلد با یک مقدار ذخیره گردد‪.‬‬
‫)>‪ :(multislot <slot-name‬این فیلد اجازه می دهد چندین مقدار در یک اسالت ذخیره شود‪.‬‬
‫در مثال اسالید بعد فقط یک ساختار ایجاد شده است و تا زمان مقداردهی با دستور ‪ Assert‬این‬
‫الگو به ‪ Favt‬تبدیل نمی شود‪.‬‬
‫دستور ‪Assert‬‬
‫مقداردهی ‪ Template‬با دستور ‪ Assert‬انجام می شود‪.‬‬
EXAMPLE 1
‫در ‪ EXAMPLE 1‬یک ‪ Fact‬با نام ‪ Person‬که قبال با دستور ‪ DefTemplate‬ساختار‬
‫آن ایجاد شده است مقداردهی می شود و در قسمت ‪ Fact-list‬اضافه می‬
‫گردد‪ .‬این ‪ Fact‬بصورت گروهی ایجاد شده است‪ .‬یعنی ‪ Fact‬با یک نام و چندین‬
‫اسالت‪.‬‬
‫با دستور ‪ Assert‬می تواند ‪Fact‬هایی بصورت جداگانه نیز تعریف کرد که در این‬
‫صورت نیازی به تعریف ‪ Template‬نمی باشد‪.‬‬
‫مثال زیر یک ‪ Fact‬با نام ‪ Color‬با مقدار ‪ Red‬به ‪ list-Fact‬اضافه می کند‪.‬‬
‫مثال زیر چهار ‪ Fact‬به ترتیب با نام های ‪ Color‬و ‪ Type‬و ‪ Size‬و ‪ Width‬با مقادیر ‪ Red‬و ‪ Male‬و‬
‫‪ 100‬و ‪ 230‬به طور همزمان اضافه می نماید‪.‬‬
‫محدودیت ها برای اسالت‬
‫با اعمال محدودیت ها می توان ‪ Slot‬های یک ‪ Template‬را مجبور به وارد کردن‬
‫داده های با قالب خاص نمود و یا مقداری پیش فرض برای اسالت ها در نظر‬
‫گرفت‪.‬‬
‫به عنوان مثال درصورتیکه سعی کنید برخالف محدودیت تعریف شده وارد نمایید‪ ،‬با خطایی از‬
‫سوی نرم افزار ‪ Clips‬مواجه خواهید شد‪.‬‬
‫متغیرها (‪)Variable‬‬
‫در نرم افزار ‪ Clips‬می توان دو نوع متغیر تعریف نمود‪:‬‬
‫‪‬‬
‫‪‬متغیر چند مقداری (‪)Multi Value‬‬
‫متغیر تک مقداری (‪)Single Value‬‬
‫مثال‬
‫ویلکارد ها (‪)Wildcard‬‬
‫ویلکاردها عالمت هایی هستند که به جای هر کاراکتر یا کاراکتر خاصی بکار می‬
‫روند‪ .‬مانند * که در هنگام جستجو به معنای “هر” بکار می رود‪.‬‬
Example 2
(assert
(data 1 blue)
(data 1 blue red)
(data 1 blue red 6.9)
)
(defrule find-data)
(data ?x $?y ?z)
=>
(printout t “?x = “?x crlf
“?y = “ ?y crlf
“?z = “ ?z crlf
“-----------” crlf)
)
(run)
?x = 1
?y = (blue red)
?z = 6.9
------?x = 1
?y = (blue)
?z = red
---------?x = 1
?y = ()
?z = blue
--------
‫بدست آوردن شماره ایندکس ‪Fact‬‬
‫برای انجام بعضی از عملیات ها نیاز به شماره ایندکس ‪ Fact‬می باشد‪ .‬به همین دلیل‬
‫از روش زیر شماره ایندکس را بدست می آوریم‪ .‬باید بدانیم که شماره ایندکس منظور‬
‫همان شماره ای است که در پنجره ‪ Fact-List‬در سمت چپ ‪ Fact‬نشان داده می شود‬
‫و این شماره را خود نرم افزار بصورت اتوماتیک به ‪Fact‬ها اختصاص می دهد‪.‬‬
‫>‪ :<variable-symbol‬نام یک متغیر است که شماره ایندکس در آن قرار دارد‪.‬‬
‫>‪ :<pattern-CE‬نام ‪ Fact‬است که میخواهیم شماره ایندکس آن را بدست بیاوریم‪.‬‬
‫‪ :>-‬عالمت انتساب می باشد‪.‬‬
‫در لیست زیر تعداد ‪ Fact 4‬وجود دارد‪ .‬شماره ایندکس ‪ 0‬یعنی ‪ f-0‬که توسط خود‬
‫نرم افزار رزرو می شود و در واقع یک مقداردهی اولیه انجام می دهد‪ .‬حتی اگر‬
‫هیچ ‪ Fact‬تعریف نشده باشد این شماره بعنوان (‪ f-0 )initial-fact‬توسط خود نرم‬
‫افزار استفاده می شود و ‪Fact‬ها از شماره ‪ 1‬به بعد شماره گذاری می شوند‪.‬‬
‫حذف ‪ Fact‬با دستور ‪Retract‬‬
‫با استفاده از این دستور می توان یک ‪Fact‬را حذف نمود‪ .‬باید دقت نمود که این‬
‫دستور با داشتن شماره ایندکس ‪ Fact‬می تواند آن را حذف نماید که از روش‬
‫قبل ایندکس را بدست می آوریم‪.‬‬
‫<‪ :>retract-specifier‬شماره ایندکس ‪Fact‬ای را که قرار است حدف نماییم‪،‬‬
‫مشخص می کنیم‪.‬‬
‫در مثال زیر یک قاعده به نام ‪ Rule2‬تعریف می شود و در قسمت ‪ pattern‬تعریف‬
‫کرده ایم که اگر ‪ fact‬به نام ‪ Color‬دارای مقدار ‪ red‬وجود داشت‪ ،‬شماره ایندکس‬
‫آن را در متغیری به نام ‪ FactNumber1‬که خودمان تعریف کرده این قرار می دهد و‬
‫در قسمت ‪ Action‬یا همان ‪ Then‬اگر آن ‪ Fact‬وجود داشته باشد با دستور‬
‫‪ Retract‬آن ‪ Fact‬یعنی ‪ Color‬را حذف می کند‪.‬‬
‫نکته‪:‬‬
‫•‬
‫زمانی که یک ‪ Fact‬حذف می گردد‪ ،‬شماره آن ‪ Fact‬دیگر به ‪Fact‬های جدید که‬
‫ایجاد می شود‪ ،‬اختصاص داده نمی شود و به جای آن شماره خالی می‬
‫باشد‪.‬‬
‫•‬
‫با دستور (* ‪ )Retract‬همه ‪ Fact‬ها حذف می گردد‪ .‬این دستور معادل دستور‬
‫(‪ )Clear‬می باشد‪.‬‬
‫تغییر ‪ Fact‬ایجاد شده با ‪ Template‬توسط دستور‬
‫‪Modify‬‬
‫با استفاده از دستور ‪ Modify‬می توان مقدار ‪Fact‬هایی که قبال با دستور‬
‫‪ Deftemplate‬ایجاد شده را تغییر داد‪.‬‬
‫<‪ :>fact-index‬شماره ایندکس ‪ Fact‬مورد نظر را مشخص می نماید‪.‬‬
‫<‪ :>slot-name‬نام اسالتی که می خواهیم مقدار آن را تغییر دهیم‪.‬‬
‫<‪ :>slot-value‬مقدار برای اسالید که میخواهیم مقدار آن را تغییر بدهیم‪.‬‬
‫مثال زیر ‪ Template‬با شماره ایندکس ‪ 4‬محتوای اسالت ‪ Name‬را به مقدار‬
‫‪ Mohsen‬تغییر می دهد‪.‬‬
‫کپی نمودن ‪ Fact‬ایجاد شده با ‪ Template‬توسط‬
‫دستور ‪Duplicate‬‬
‫•‬
‫با این دستور از روی ‪Fact‬هایی که قبال با دستور ‪ DefTemplate‬ایجاد شده‬
‫کپی گرفته می شود‪.‬‬
‫<‪ :>fact-Index‬شماره ‪Fact‬ای که می خواهیم اسالت های آن را تغییر بدهیم‪.‬‬
‫(<‪ :)>Slot-Name Slot-Value‬نام اسالت به همراه مقدار جدید آن را مشخص‬
‫می کند‪.‬‬
‫دستور ‪ save-fact‬جهت ذخیره ‪Fact‬ها‬
‫با استفاده از این دستور می توان کلیه ‪Fact‬های موجود (‪Fact‬ها در پنجره‪)Fact‬‬
‫را در داخل فایل ذخیره نمود‪.‬‬
‫<‪ :>FileName‬مسیر ذخیره فایل به همراه نام و پسوند فایل را مشخص می‬
‫کند‪.‬‬
‫مثال زیر کلیه ‪Fact‬های موجود را در فایلی به نام ‪ MyFacts‬با پسوند ‪ txt‬در درایور‬
‫‪ C‬ذخیره می کند‪.‬‬
‫دستور ‪ Load-Facts‬جهت باز نمودن ‪Fact‬ها‬
‫با استفاده از این دستور می توان ‪Fact‬هایی که قبال توسط دستور ‪Save-Facts‬‬
‫در فایل ذخیره نموده ایم را به لیست ‪ Fact-List‬اضافه نماییم‪.‬‬
‫<‪ :>FileName‬مسیر ذخیره فایل به همراه نام و پسوند فایل را مشخص می‬
‫نماید‪.‬‬
‫دستور زیر ‪Fact‬هایی که قبال در فایل مذکور (‪ )MyFact.txt‬ذخیره شده است را‬
‫باز نموده و به پنجره ‪ Facts‬اضافه می نماید‪.‬‬
‫تعریف قواعد (‪)Rules‬‬
‫با این دستور می توان قواعد را تعریف نماییم‪ .‬نرم افزار ‪ Clips‬یک برنامه ‪Rule-‬‬
‫‪ Base‬نیز می باشد‪ .‬یعنی بر مبنای قواعد نیز کار می کند‪.‬‬
‫<‪ :>rule-name‬این قسمت شامل نام قاعده یا ‪ Rule‬می باشد‪.‬‬
‫<‪ :>optional comment‬در این قسمت می توان توضیحاتی در مورد آن قواعد‬
‫نوشت‪ .‬توضیحات اختیاری می باشد‪.‬‬
‫<‪ :>pattern‬این قسمت الگو را مشخص می نماید‪ .‬یعنی در واقعا همان‬
‫قسمت الگو عبارت شرطی می باشد‪.‬‬
‫نکته‪ :‬عالمت * در ‪Syntax‬ها به معنی تعداد ‪ 0‬یا بیشتر می باشد‪.‬‬
‫*<‪ >patterns‬یعنی چندین الگو می توان تعریف نمود‪.‬‬
EXAMPLE
‫یعنی اگر ‪ fact‬با نام ‪ car‬مقدار فیلد ‪ Color‬آن ‪ Red‬بود سپس یک ‪ Fact‬با دستور‬
‫‪ Assert‬به نام ‪ Action‬ایجاد کن و مقدار آن را ‪ ok‬قرار بده‪.‬‬
‫نکته‪ :‬عالمت >= معادل کلمه کلیدی ‪ Then‬در شبه کد می باشد‪.‬‬
‫ایجاد ‪ Fact‬گروهی با دستور ‪Deffacts‬‬
‫با استفاده از این دستور می توان ‪Fact‬هایی بصورت گروهی تعریف کرد و به عنوان دانش اولیه با‬
‫پایگاه دانش اضافه می شود‪.‬‬
‫<‪ :>deffact-name‬نام ‪ Fact‬را مشخص می کند‪.‬‬
‫نکته‪Fact :‬هایی که با دستور ‪ Deffact‬تعریف می شوند در پنجره ‪ Facts‬نمایش داده نمی شوند‪.‬‬
‫]>‪ :[<comment‬توضیحاتی برای ‪ Fact‬می باشد که نوشتن این توضیح اختیاری می باشد‪.‬‬
‫<‪ :>pattern‬نام الگو یا همان ‪Fact‬ها را مشخص می نماید‪.‬‬
‫مثال زیر ‪ Fact‬با نام ‪ BaseFact1‬شامل فیلدهای اولیه ‪ Color, type, Height‬را به‬
‫عنوان دانش اولیه به پایگاه داده اضافه می نماید‪.‬‬
‫چاپ رشته ‪ /‬متغیر با دستور ‪Printout‬‬
‫>‪ :<logical-name‬در این قسمت می توان نوع خروجی را مشخص نمود‪ .‬با‬
‫کاراکتر ‪ )Terminal( t‬مانیتور به عنوان خروجی در نظر گرفته می شود‪.‬‬
‫<‪:>print-items‬در این قسمت متن مورد نظر با آیتم هایی که قرار است چاپ‬
‫شوند را مشخص می نماییم‪.‬‬
‫نکته‪ :‬عبارت ‪ crlf‬تعیین می کند که بعد از چاپ نمودن آیتم ها‪ ،‬مکان نما به خط‬
‫بعدی رود‪ .‬این کلمه معادل ‪ \n‬در زبان ‪ C++‬می باشد‪.‬‬
‫نمایش لیست دستورات‬
‫با استفاده از دستورات زیر می توان لیست بعضی از ساختارهایی‬
‫که تا بحال یاد گرفته ایم را مشاهده نماییم‪:‬‬
‫(‪ :)list-defrules‬این دستور لیست قواعد موجود را نمایش می دهد‪.‬‬
‫(‪ :)list-deftemplates‬این دستور الگوهای موجود را نمایش می دهد‪.‬‬
‫(‪ :)list-deffacts‬این دستور لیست ‪Fact‬هایی را که با دستور ‪ Deffacts‬تعریف‬
‫کرده ایم را نمایش می دهد‪.‬‬
‫(‪ :)Facts‬این دستور لیست تمام ‪Fact( Fact‬های موجود در پنجره ‪ Facts‬که با‬
‫دستورات ‪ assert‬یا ‪ Deftemplate‬اضافه نموده ایم) را نمایش می دهد‪.‬‬
‫نمایش ساختار دستورات‬
‫با استفاده از دستورات اسالیدهای بعد می توان ساختار یعنی همان سورس کد‬
‫بعضی از دستوراتی که تا به حال یاد گرفته ایم را نمایش دهیم‪.‬‬
‫نمایش ساختار قواعد (‪)ppdefrule‬‬
‫با این دستور سورس و ساختار قواعد را به همان صورت که یا دستور ‪Defrule‬‬
‫تعریف نموده ایم‪ ،‬نمایش می دهد‪.‬‬
‫<‪ :>defrule-name‬نام قاعده مورد نظر را مشخص می کند‪.‬‬
‫دستور زیر ساختار قاعده ‪ rule1‬را نمایش می دهد‪.‬‬
‫یادآوری‪ :‬قواعد را با دستور ‪ Defrule‬تعریف می نماییم‪.‬‬
‫نمایش ساختار الگو (‪)ppdefTemplate‬‬
‫با این دستور سورس و ساختار الگوهایی که با دستور ‪ Deftemplate‬تعریف‬
‫نموده ایم را نمایش می دهد‪.‬‬
‫<‪ :>deftemplate-name‬نام الگوی مورد نظر را نمایش می دهد‪.‬‬
‫دستور زیر ساختار و سورس الگویی به نام ‪ person‬را نمایش می دهد‪.‬‬
‫یادآوری‪ :‬الگوها را با دستور ‪ Deftemplate‬تعریف می نماییم‪.‬‬
‫نمایش ساختار ‪Fact‬ها (‪)ppDeffacts‬‬
‫با این دستور سورس و ساختار الگوهایی که با دستور ‪ DefFacts‬تعریف نموده‬
‫ایم را نمایش می دهد‪.‬‬
‫<‪ :>deffacts-name‬نام ‪ Fact‬مورد نظر را مشخص می کند‪.‬‬
‫دستور زیر ساختار و سورس ‪ Fact‬به نام ‪ Animal‬را نمایش می دهد‪.‬‬
‫یادآوری‪Fact :‬ها را با دستور ‪ Deffacts‬تعریف می نماییم‪ .‬با توجه داشت‬
‫‪Fact‬هایی که با این دستور تعریف می شوند به عنوان پایگاه دانش در نظر گرفته‬
‫می شوند‪.‬‬
‫نمایش ساختار ‪Fact‬ها (‪)ppFact‬‬
‫با این دستور سورس و ساختار ‪Fact‬هایی که با دستور ‪ Assert‬تعریف نموده ایم‬
‫را مشخص می نماید‪.‬‬
‫دستور زیر ساختار و سورس ‪ Fact‬شماره ‪ 3‬را نمایش می دهد‪.‬‬
‫نکته‪ :‬برای بدست آوردن شماره ایندکس می توانید از تکنیکی که در قسمت‬
‫های قبل توضیح داده شده استفاده نمایید‪.‬‬
‫حذف نمودن ساختارها‬
‫با استفاده از دستورات اسالیدهای بعد می توانید ساختارهایی را که تا به حال‬
‫آموخته ایم را حذف نمایید‪.‬‬
‫حذف قواعد با دستور (‪)undefrule‬‬
‫با این دستور قواعدی را که با دستور ‪ Defrule‬تعریف و ایجاد نموده ایم را حذف‬
‫می نماید‪.‬‬
‫<‪ :>defrule-name‬نام قاعده مورد نظر را مشخص می نماید‪.‬‬
‫دستور زیر قاعده با نام ‪ Rule1‬که قبال توسط دستور ‪ Defrule‬تعریف نموده ایم را‬
‫حذف می کند‪.‬‬
‫حدف الگوها با دستور (‪)undeftemplate‬‬
‫با این دستور الگوهایی را که با دستور ‪ DefTemplate‬تعریف و ایجاد نموده ایم را‬
‫حذف می نماید‪.‬‬
‫<‪ :>deftemplate-name‬نام الگو مورد نظر را مشخص می کند‪.‬‬
‫دستور زیر الگویی را با نام ‪ Person‬را که قبال توسط دستور ‪ DefTemplate‬تعریف‬
‫نموده ایم را حذف می کند‪.‬‬
‫حذف ‪ Fact‬با دستور (‪)undeffacts‬‬
‫با این دستور ‪Fact‬هایی را که با دستور ‪ Deffacts‬تعریف و ایجاد نموده ایم را‬
‫حذف می کند‪.‬‬
‫<‪ :>deffacts-name‬نام ‪ Fact‬مورد نظر را مشخص می کند‪.‬‬
‫دستور زیر یک ‪ Fact‬را با نام ‪ Animal‬که قبال توسط دستور ‪ Deffacts‬تعریف نموده‬
‫ایم‪ ،‬حذف می کند‪.‬‬
‫حذف ‪ Fact‬با دستور ‪Retract‬‬
‫این دستور در قسمت های قبل توضیح داده شده است‪ .‬به یاد داشته باشید که‬
‫این دستور برای حذف ‪Fact‬هایی که با دستور ‪ Assert‬ایجاد نموده ایم می باشد‬
‫و همچنین برای حذف آن ‪ Fact‬بجای نام ‪ Fact‬نیاز به ایندکس ‪ Fact‬دارد‪.‬‬
‫دستورات اساسی‬
‫(‪ :)clear‬این دستور تمام ‪Fact‬ها و ‪Rule‬ها را از حافظه کاری حذف می کند‪ .‬معادل این است‬
‫یکبار از نرم افزار خارج شویم و دوباره وارد شویم‪.‬‬
‫(‪ :)reset‬این دستور اطالعات مربوط به ‪Fact‬ها را حذف می کند و ‪ Agenda‬را ریست می کند‪.‬‬
‫(‪ :)agenda‬قواعد فعال را نمایش می دهد‪.‬‬
‫(‪ :)refresh‬این دستور قواعد را بروز رسانی می کند‪.‬‬
‫(]>‪ :)Run [<Limit‬با این دستور قواعد فعال در حافظه کاری اجرا می شود که در قسمت‬
‫<‪ >Limit‬تعداد قواعدی را که می خواهیم اجرا شود را مشخص می کنیم‪ .‬مشخص نمودن‬
‫تعداد اختیاری می باشد‪ .‬درصورتیکه تعداد را مشخص ننماییم یعنی (‪ )Run‬دراینصورت کلیه‬
‫دستورات فعال در پنجره ‪ Agenda‬اجرا شوند‪.‬‬
‫بعضی توابع سودمند‬
‫تابع ‪save‬‬
‫با این تابع مجموعه از ساختارهایی که وجود دارند (‪ Fact‬و قواعد و الگوها و ‪)...‬‬
‫را در فایلی ذخیره می نماید‪.‬‬
‫<‪ :>file-name‬مسیر و نام فایل به همراه پسوند آن را مشخص می نماید‪.‬‬
‫تابع ‪Load‬‬
‫توسط این دستور می توان ساختارهایی که قبال ذخیره نموده ایم (‪ )save‬را باز‬
‫نماید و آماده اجرا کند‪.‬‬
‫<‪ :>file-name‬مسیر و نام فایل به همراه پسوند ان را مشخص می کند‪.‬‬
‫تابع ‪Open‬‬
‫با استفاده از این تابع می توان فایل برنامه ‪ Clips‬که قبال ذخیره کرده ایم را باز نماییم‪.‬‬
‫<‪ :>file-name‬این قسمت شامل نام فایل به همراه آدرس کامل و پسوند فایل می باشد‪ .‬حتما اگر‬
‫در مسیر عالمت بک اسلش وجود دارد باید آن را مشخص نماییم‪.‬‬
‫<‪ :>logical-name‬این قسمت یک نام منطقی می باشد که قبال در برنامه جاری نباید استفاده شده‬
‫باشد‪.‬‬
‫]>‪ :[<mode‬این قسمت نحوه دستیابی به فایل را مشخص می نماید‪ .‬این قسمت اختیاری می باشد‪.‬‬
‫نکته‪ :‬برای مشخص نمودن عالمت \ باید این عالمت را دو بار پشت سر هم تایپ نماییم تا برای ‪Clips‬‬
‫معنی \ بدهد‪ .‬یعنی \\ تایپ نماییم‪.‬‬
Mode ‫انواع حالت های‬
•
•
•
•
“r” read access only
“w” write access only
“r+” read and write access
“a” append access only
‫درصورتیکه تابع ‪ Open‬با موفقیت اجرا شود مقدار ‪ True‬و در غیراینصورت مقدار‬
‫‪ False‬را برمیگرداند‪.‬‬
‫تابع ‪Close‬‬
‫این تابع برعکس تابع ‪ Open‬کار می کند و فایلی را که قبال با تابع ‪ Open‬باز شده‬
‫است را می بندد‪.‬‬
‫]>‪ :[<logical-name‬نام منطقی فایل است که هنگام ‪ Open‬کردن به آن اختصاص‬
‫دادیم‪.‬‬
‫تابع ‪Read‬‬
‫با استفاده از این تابع می توان مقداری را از صفحه کلید دریافت نمود یا محتویات‬
‫یک فایل را خواند‪.‬‬
‫]>‪ :[<logical-name‬نام منطقی فایل است که هنگام ‪ Open‬کردن به آن اختصاص‬
‫دادیم‪ .‬این پارامتر اختیاری است‪.‬‬
‫تابع ‪Bind‬‬
‫با استفاده از این تابع یک مقدار را به یک متغیر منتقل می نماییم‪.‬‬
‫<‪ :>variable‬نام یک متغیر را مشخص می نماید‪.‬‬
‫<‪ :>expression‬یک عبارت را که قرار است در متغیر قرار گیرد‪ ،‬مشخص می‬
‫نماید‪.‬‬
‫مولفه های شرطی‬
‫•‬
‫•‬
‫•‬
‫•‬
‫پیوند منطقی ‪ AND, OR, NOT‬برای ترکیب ‪Pattern‬ها‬
‫عملگرهای شرطی (~ ‪ )&, |,‬بروی محتوای فیلدها‬
‫عملگر شرطی ‪ If‬بر روی متغیرها‬
‫عملگر ‪Test‬‬
Example
‫عملگر منطقی ‪ AND, OR, NOT‬برای ترکیب‬
‫‪Pattern‬ها‬
‫از عملگرهای شرطی در ترکیب ‪Pattern‬ها در بین ‪Rule‬ها استفاده می شود‪.‬‬
‫عملگر ‪OR‬‬
‫این پیوند مانند عملگر “یا منطقی” می باشد‪ .‬یعنی حداقل یکی از حاالت اتفاق‬
‫بیفتد‪.‬‬
‫<‪ :>conditional-element‬عملوندهای شرطی را مشخص می کند‪.‬‬
‫عملگر ‪AND‬‬
‫این عملگر مانند عملگر “و منطقی” می باشد و هنگامی استفاده می گردد که‬
‫همه حاالت باید اتفاق بیفتند‪ .‬این عملگر بصورت پیش فرض انتخاب شده است‪.‬‬
‫یعنی اگر بین ‪Pattern‬ها عملگری مشخص نکنیم‪ ،‬بصورت پیش فرض ‪ AND‬می‬
‫باشد‪.‬‬
‫<‪ :>conditional-element‬عملوندهای شرطی را مشخص می کند‪.‬‬
‫عملگر ‪NOT‬‬
‫این عملگر مانند “نقیض منطقی” می باشد‪.‬‬
‫عملگر شرطی ‪IF-Else‬‬
‫این دستور همانند دستور ‪ If‬در دیگر زبان های برنامه نویسی می باشد‪.‬‬
‫<‪ :>expression‬عبارت مورد ارزیابی را مشخص می نماید که خروجی این قسمت یک‬
‫عبارت منطقی ‪ True‬یا ‪ False‬می باشد‪ .‬درصورتیکه عبارت برقرار باشد خروجی ‪ True‬و‬
‫‪ Action‬مربوط به ‪ Then‬انجام می شود در غیر اینصورت ‪ Action‬مربوط به ‪ Else‬اجرا می‬
‫شود‪ .‬قسمت ‪ Else‬اختیاری می باشد‪.‬‬
‫<‪ :>Action‬عملی که قصد اجرا شدنش را در قسمت ‪ Then‬یا قسمت ‪ Else‬داریم را‬
‫مشخص می نماید‪.‬‬
‫دستور ‪Switch‬‬
‫این دستور معادل دستور ‪ Switch‬در زبان برنامه نویسی ‪ C‬می باشد که در این حالت از‬
‫بین چند حالت‪ ،‬یک حالت انتخاب می شود و دستور مربوط به آن اجرا می شود‪.‬‬
‫<‪ :>test-expression‬عبارتی که قرار است مورد ارزیابی قرار گیرد را مشخص می کند‪.‬‬
‫<‪ :>case-statement‬حالت هایی که در صورت منطبق بودن یکی از حاالت با عبارت مورد‬
‫ارزیابی اجرا می شود‪.‬‬
‫]>‪ :[<default-statement‬مقدار پیش فرض که در صورت عدم تطبیق هیچ یک از حاالت با‬
‫عبارت مورد ارزیابی اجرا می شود‪ .‬این قسمت اختیاری می باشد‬