33
predicates
predicateName (argument_type1, argument_type2,...,argument_tуреN)
Мұндағы: argument_type1, ..., argument_typeN – стандартты домен
немесе domains секциясындағы хабарланған домендер. Хабарланған
домендер аргументтері мен аргумент типінің бейнелері екеуі бір.
Бақылау сұрақтары
1.
Visual Prolog тілінің ортасы мен интерфесі.
2.
Тілдің құрауыштары мен утилиттері.
Есеп беру мазмұны жəне формасы: Тапсырмалар нұсқасын құрастыру.
Тапсырманы орындау реті. Орындау нəтижелері. Қортынды.
2.1. Зертханалық жұмыс №2.Visual Prolog логикалық программалау
тілінің негізі.
Мақсаты: Фактілер, ережелер жəне сұрауларды орналастыру əдістері.
Ұсыныстар
Пролог тiлін құрайтын тек екі түрлі ұғым бар: ереже немесе факті. Бұл
ұғымдар прологта ұсыныс (clause) терминiмен белгiлi. Прологтағы
программалардың негізі ұсыныстардан тұрады.
Факті объекттердiң арасындағы қатынасты немесе қасиеті көрсетеді.
Факті өзiне-өзі жеткiлiктi. Прологқа айғақтың расталуы үшiн қосымша
дəлелдеулер керек болмайды жəне де факті логикалық қорытындының негізі
ретінде қолданылды.
Ережелерді қарастырсақ. Проглогта бір фактінің сенімділігінен
басқада бірнеше фактілер табуға болады. Ереже – бұл берілгендерді
логикалық түрде суреттейтін прологтың құрылымы. Ереже - бұл нақтылы
қасиет немесе қатынас, басқада қатынастар белгілі болғанда. Бұл қатынастар
үтiрлермен бөлiнген.
Ережелерге бірнеше мысалдар келтірейік.
1-Мысал. Кейбір тағамдардың Диана мəзіріне сəйкес келетіндігіне
қорытынды жасай алатын ережелер.
Диана-вегетарианшы ол тек қана өзінің дəрiгерiнің айтқанымен тамақтанады.
(Diane is a vegetarian and eats only what her doctor tells her to eat )
Алдыңғы ереже мен мəзірді біле отырып, мəзірдегі тағамдарды Диана
таңдауын алдын ала қорытынды жасай аласыз. Сіз бұл жұмысты іске асыру
үшін тағамның берілген шектерге сəйкес келетіндігін тексеруіңіз керек:
• Food_on_menu көкөніс болып табылады ма?
• Food_on_menu дəрігердің тізіміне кіреді ме?
• шешiм: егер екi жауап оң болса, Диана Food_on_menu- тапсырыс бере
алады.
Пролгогтағы ұқсас қатынас ережемен анықталуы керек, өйткенi
қорытынды фактіге сай негiзделген. Ереженi жазудың бiр нұсқасы:
34
diane_can_eat(Food_on_menu):-vegetable(Food_on_menu),
on_doctor_list(Food_on_menu).
vegetable(Food_on_menu) -дан кейiн үтір тұратынына көңiл аударыңыз. Ол
бiрнеше мақсаттардың конъюнкциясын айқындайды жəне "жəне" сияқты
оқылады;
екi
ереже
де
-
diane_can_eat(Food_on_menu)
үшін
vegetable(Food_on_menu) жəне on_doctor_list(Food_on_menu ) ақиқат болуы
керек.
2-Мысал. Егер Personl Person2-нiң ата-анасы болып табылса, сiз ақиқат
фактісін жазғыңыз келеді деп болжаймыз. Керек факті осылай көрiнедi:
parent(paul, samantha).
Бұл айғақ бойынша Пол, Самантаның ата-анасы екендігін білдіреді.
Бiрақ Visual Prolog мəліметтер қорында факілер бар деп болжайық. Ол
айғақтар əкелік қатынасты қалыптастырады. Мысалы, "Пол Самантаның
əкесі":
father(paul, samantha).
Енді сiзде аналық қатынас қалыптастырушы айғақ болсын дейік,
"Джулия - Самантаның анасы":
mother(julie, samantha).
Егер де сіздерде бiрнеше фактілер бар болып, жəне олар аталық-аналық
қарым-қатынастарды қалыптастыратын болса,онда мəліметтер қорындағы
əрбір ағайынды қатынасқа уақытты өлтірудің қажеті жоқ.
Сіз білетіндей, Personl Personа-ның ата-анасы, егер Personl-Person2-нің
əкесi немесе Personl Person2-нің анасы болса, онда неге бұл шектерді
біріктіретін ережелерді жазбасқа? Бұл шарттарды табиғи тiлде
қалыптастырғаннан кейін оларды пролог ережесі бойынша жазу жеткілікті.
parent(Personl, Person2):- father(Personl, Person2).
parent(Personl, Person2):- mother(Personl, Person2).
Бұл пролог ережелері
Personl Person2-нiң ата-анасы болады, егер Person1 Person2-нің əкесі
болса жəне
Personl Person2-нiң анасы болады,егер Personl Person2-нiң анасы
болcа.
3-Мысал
. Егер адамға машина (likes) ұнаса жəне машина сатылса (for
sale), онда ол машинаны сатып ала алады.
Бұл ретте қатынас пролог тіліне келесі ереже бойынша ауыстырыла
алады:
can_buy(Name, Model):-person(Name),
car(Model), likes(Name, Model), for_sale(Model).
Бұл ережелер келесi қатынастарды сипаттайды:
Name сатып ала алады (can_buy ) Model, егер Name адам(person) жəне
Model машина (car) болса, жəне Model сатылса (for_sale) Name Model –ді
35
ұнатады (likes). Егер бұл ереже 4 шартты қанағаттандырса, онда ол ақиқат
болады.
Автомобилдi
сату
проблемасының
шешудің
жолын
іздейтін
ch02e02.pro-программасы көрсетілген. Тексеріп көріңіз:
predicates
can_buy(symbol, symbol)
person(symbol)
car(symbol)
likes(symbol, symbol)
for_sale(symbol)
clauses
can_buy(X,Y):-person(X), car(Y), likes(X,Y), for_sale(Y).
person(kelly).
person(]udy).
person(ellen).
person(mark).
car(lemon).
car(hot_rod).
likes(kelly, hot_rod).
ikes(judy, pizza).
likes(ellen, tennis).
likes(mark, tennis).
for_sale(pizza).
for_sale(lemon).
for_sale(hot_rod).
Джуди жəне Келли не сатып ала алады? Hot_rod-ты кім сатып алуы
мүмкін? Келесі мақсаттарды GOAL: -бөлiмiнде сынап көрiңiз.
can_buy(Who, What). can_buy(judy, What). can_buy(kelly, What). can_buy(Who,
hot_rod).
Бұл программаға басқа фактілер мен жаңа ережелер қосайық. Өзіңіздің
алдында құрған сұраныстарыңыз бойынша программаны тексеріп көріңіз.
Қорытындының нəтижелері сіздің күткеніңізді ақтады ма, əлде жоқ па?
Жаттығулар:
1. Visual Prolog-та келесі ережелеріне сəйкестендіріп жазыңыз:
eats(Who, What):- food(What ), likes(Who, What).
pass_class(Who ):- did_homework(Who ), good_attendance(Who ).
owns(Who, What):- bought(Who, What).
2. Берілген сөйлемдерден Visual Prolog ережелерін құрыңыз:
•
адамның асқазаны бос болса, онда ол аш;
•
егер жақсы ақы төлеленетін жəне көңiлдi жұмыс болса,онда ол
барлығына ұнайды;
•
автокөлiкті кім сатып алса,онда сол басқарады.