Республикасы білім жəне ғылым министрлігі



Pdf көрінісі
бет5/8
Дата12.03.2017
өлшемі1,43 Mb.
#8954
1   2   3   4   5   6   7   8

 

Анонимді айнымалы 

Анонимді  айнымалылар  бiздiң  программаларымызды  ретке  келтіруге 

мүмкіндік  береді.  Егер  сiзге  нақтылы  мəлiмет  керек  болса,  анонимді 

айнымалыларды  керек  емес  мəліметтерді  жою  үшін  пайдалануға  болады. 

Прологта  анонимді  айнымалыларастын  сызу  символы  арқылы  белгіленеді 

(_). 

Келесі  "отбасылық"  мысал  анонимді  айнымалыларды  пайдалану 



арқылы  іске  асады.  TestGoalға  ch02e04.pro  программасының    жобасын 

жүктеңiз. 



 

predicates 

male(symbol) 

female(symbol) 

parent(symbol, symbol) 

clauses 

male(bill). 

male(]oe). 

female(sue). 

 

39

female(tammy). 



parent(bill,joe). 

parent(sue,joe). 

parent(joe,tammy). 

 

Аноним  айнымалысы  кез  келген  басқа  өзгерiстердiң  орынында 



қолданылады  жəне оған  ешқандай мағына берілмейді. 

Мысалы,  бiзге  келесi  сұрауда  қандай  адамдар  ата-ана  бола 

алатындығын  бiлу  керек  бірақ,  сiзге  олардың  балалары  қызықты  емес. 

Прологтағы  əрбір  сұраныста  сізге  сызылған  символды  падаланған  кезде 

айнымалының  мағынасы туралы  ақпараттың қажеті жоқ. 

goal 


parent(Parent, _). 

Мұндай  сұранысты  алғаннан    кейін  пролог  былай  деп  жауап  береді: 

(Test Goal) 

Parent=bill Parent=sue Parent=joe 3 Solutions 

Бұл жағдайда пролог  үш ата-ананы тауып бередi, бiрақ ол parent -тың 

ұсынысында екiншi дəлелмен сабақтас мəндердi бермейдi. 

Анонимді  айнымалыларды  айғақтар  ретінде  пайдалануға  болады. 

Прологтiң келесi айғақтары: 

owns(_, shoes). eats (_ ). 

Табиғи тiлде  бекiтулердi өрнек үшiн қолдана алды: 

Əрбір  адамда  аяқ  киім  бар.  (Everyone  owns  shoes  )  Əрбiр  адам 

тамақтана алады. (Everyone eats ) 

Аноним айнымалысы кез келген мəлiметтерге қарама-қарсы келеді. 

 

Құрама мақсаттарконъюнкция жəне дизъюнкция 

Көріп отырғаныңыздай, құралған мақсаттарды  іздеудің нəтижесі үшін 

қолдануға  болады,  екі  ішкі  мақсат  А  жəне  В  ақиқат  (конъюнкция  ),  ішкі 

мақсат үтір арқылы ажыратамыз. Егер іздеудің нəтижесінде ақиқат А жəне В 

ішкі  мақсат  (дизъюнкция)  болса  бұл  ішкі  мақсат  нүктелі  үтір  арқылы 

ажыратамыз. 

Төменде программаның мысалы көрсетілген:  

 

predicates 

car(symbol,long,integer,symbol,long) 

truck(symbol,long,integer,symbol,long) 

vehicle(symbol,long,integer,symbol,long) 

clauses 

car(Chrysler,130000,3,red,12000). 

car(ford,90000,4,gray,25000). 

car(datsun,8000,1,red,30000). 

truck(ford,80000, 6,blue,8000). 

truck(datsun,50000,5,orange, 20000) . 

truck(toyota,25000,2,black,25000). 


 

40

vehicle(Make,Odometer,Age,Color,Price):-сar(Make,Odometer,Age,Color,Price); 



truck(Make,Odometer,Age,Color,Price). 

 

TestGoal-дың  жобасына  осы  программаны  жүктеңiз,  содан  соң  мақсат 



қойыңыз: 

Goal 


car(Make, Odometer, Years_on_road, Body, 25000). 

 

Берілген  мақсат  айтылған  ұсыныстардан  бағасы  $25  000  тұратын  



машина (саr ) тұратын машина табуға тырысады. Пролог былай жауап береді: 

Make=ford, Odometer=90000,  

Years_on_road=4,  

Body=gray  

1 Solution. 

Дегенмен берілген   мақсат    біршама  жасанды.  Жасанды  болғандықтан 

тез арада мынандай типті сұрақ қойылады: 

Тізімде $25000-дан кем тұратын машина бар ма?( Is there a car listed that costs 

less than $25000) 

Мұндай    мақсатты  шешу  үшін  сіз  Visual  Prolog-та  келесi  құралған 

мақсатты бере аласыз: 

Сar (Make, Odometer, Years_on_road, Body, Cost) %  ішкі мақсат А жəне Cost 



< 25000.   %  ішкі мақсат В. 

Бұл  конъюнкция  болып  табылады.  Құралған    мақсатты  шешу  үшін 

пролог  ішкі  мақсаттарды  кезек  бойынша  рет-ретімен  шешуге  тырысады.  

Бастапқыда ол мынаны  шешуге талаптанады: 

Сar (Make, Odometer, Years_on_road, Body, Cost), содан соң 

Cost < 25000. 

Cost  айнымалысы  екі  подцельдерде  ұқсас  мəндерге  ие.  Енді  осының 

барлығын Test Goalмен істеп көріңіздер. 

 

Ескерту


 

Cost  <  25  000  ішкі  мақсаты  Visual  Prolog  жүйесінде  құралған  «кем» 

қатынасына  сəкес  келеді.  Кем  қатынасы  басқа  да  екі  сандық  объектілерге 

пайдаланылатын  қатынастардан  ешқандай  айымашылығы  жоқ,  бірақ  та,  ол 

қатынастымына  символмен  (<)  жəне  де  екі  объектінің  арасында  қатыстыра 

отырып жазған дұрыс. 

Қарастырсақ  келесі    өрнек  ақиқат  болып  табыла  ма?  Табиғи  тілде  ол 

былай деп сипатталады: Тiзiмде $25 000-дан кем тұратын автомобиль немесе 

$20 000-дан кем тұратын  жүк машинасы бар ма? 

Мына  тапсырмада  келесі құралған мақсаттарда пролог тиісті нəтижені 

іздестіруді қайта орындайды: 

Сar (Make, Odometer, Years_on_road, Body, Cost ), Cost<25000%  ішкі мақсат 

А немесе 

truck  (Make,  Odometer,  Years_pn_road,  Body,  Cost),  20000

мақсат В. 


 

41

Құралған  мақсаттағы  бұл  тип  дизъюнкция  болып  табылады.  Берілген 



мақсат  екі  альтернативті  ішкі  мақсаттарды,  бір  ережеге  екі  ұсыныстың 

біріктірілгеніне    сəйкес  келуі  мүмкін  келеді    деп  есептейді.  Пролог  екi  ішкі 

мақсаттарды да қанағаттандыратын нəтижелердің барлығын іздейді. 

Рұхсат  етілген  құралған  мақсатта  пролог  келесі  ішкі  мақсаттардан 

құралған  бірінші ішкі мақсаты іздеуге тырысады. ("автомобильді іздеу"): 

car(Make, Odometer, Years_on_road, Body, Cost) жəне 

Cost < 25000. 

Егер 


автомобиль 

табылса 


мақсат-ақиқат,егер 

табылмаса(жүк 

машинасын  іздеу)    –  пролог  келесі  ішкі  мақсатан  тұратын  екінші  құрама 

мақсаттарды шешуге тырысады: 

truck(Make, Odometer, Years_on_road, Body, Cost), 

жəне 


Cost < 20000. 

Visual Prolog программасы 

Visual Prolog  синтаксисі қасиеттер жəне өзара байланыстарды анықтау 

үшін    жасалған.  Көбінесе  (айғақтар  жəне  ереже)  ұсыныс,  предикаттар, 

айнымалы жəне мақсаттарды қарастардыңыз. 

Прологтың    басқа  болжамдардан    айырмашылықтары,  Visual  Prolog  -  

бақылаушы  типтердің  компиляторы:  əрбiр  предикат  үшiн  қолданылатын  

объекттердiң 

типін 


хабарлайды. 

Сонымен 


бiрге, 

Visual 


Prolog 

бағдарламаларына 

бұл 

типтерді 



орындайтын 

жылдамдығы 

машина 

кодтарына  сəйкес  келуге  мүкіндік  береді,ал    басқа  жағдайда  -  Pascalдың 



тiлдерiндегi ұқсас бағдарламалардың жылдамдығынан асады. 

Енді  Visual Prolog программасының негізгі төрт бөлімін талқылаймыз 

–  жарияланатын  жəне  сипатталатын    предикаттар,сонымен  қатар  аргумент 

типтері  ,берілген    жəне  анықталған  ережелер  программаның  мақсаты  болып 

табылады.  Бұдан  əрi  ережелердiң  синтаксисiн    жəне  хабарламаларды  

толығырақ  қарап  шығамыз  .  Соңында  ,программаның    басқа  да  бөлiмдерiн 

қысқаша  қорытындылап  сипаттаймыз:  деректер  қоры,  тұрақтылар,  əр  түрлi 

глобалдi бөлiмдер жəне компилятордың нұсқауы. 

Visual Prolog – програмасының негізгі бөлімдері: 

Prolog  Visual  тiлiндегi  программа  төрт  негiзгiзгі  программалық  реттен 

тұрады. Оларға мыналар жатады: 

 



clauses (ұсыныстар) бөлiмі; 

 



predicates (предикаттар) бөлiмі; 

 



domains (домендер) бөлiмі; 

 



goal (мақсаттар) бөлiмі. 

 

Clauses  бөлiмі-  Visual  Prolog  программасының    негізгі  бөлігі;  нақ  осы 



бөлімде  айғақтар  жəне  ережелер  жазылады,  Visual  Prolog  операциясы 

программаның мақсатын шешуге тырысады. 

Predicates  бөлiмі  бұл  (Visual  Prologта    кiрiстiрiлген  предикаттарды 

жарияламауға  да  болады)    предикаттарды  жəне  домендердің  (түрлер) 

аргументтері жарияланады. 


 

42

Domains  бөлiмі    сіздер  қолданылатын  барлық  домендерді  хабарлау 



үшiн қызмет көрсетедi, олар (стандарты домендерді жариялау міндетті емес) 

Visual Prolog-тың стандартты домендері бола алмайды. 

Goal  бөлiмі  -  бұл  сiзге  Visual  Prolog-программасының    мақсатын 

сыйғызып алады. 

Ұсыныстардың

 бөлiм

Программаны  құру  барысында  сіз  clauses  -тың  (ұсыныстар)  бөлiмiнде 

барлық  айғақтар  мен  ережелерлерді  сыйғыза    аласыз.  Негізгі  тарауда 

программадағы 

ұсыныстарға(айғақтар 

жəне 


ережелер) 

басты 


назар 

аудырылады: олар қалай жазу керектігін білдіреді. 

Егер  сiз  айғақтарды    жəне  ережелерді  олардың  прологта    көрсетілуін 

түсiнсеңiз, онда сiз clausesтың бөлiмiндегi əрбiр нақты предикат үшiн барлық 

ұсыныс бiрге орналасуы керек екендігін бiлесiз. Бiр предикатты анықтайтын 

ұсыныстардың тiзбегi процедура деп аталады. 

(clauses  бөліміндегі  бірінші  ұсыныстан  бастап)  Visual  Prolog  əрбiр 

айғақты жəне əрбiр ереженi табуға ұмтылады. Төмен қарай clausesтың бөлiмi, 

ол  бірінші  ішкі  нұсқауға  ұсынысты  шешімінің  бір  бөлігі  ретінде  орнатады. 

Егер  келесi ұсыныс  логикалық жолдың  бөлiгi болып  табылмаса,  онда  Visual 

Prolog  қойылған  нұсқағышқа  қайтарылады  жəне  кезектi  салыстыруды  (бұл 

процесс  қайтарумен  iздестiру  деп  аталады)  нұсқағышқа    орын  алмастыра 

жақындай iздейдi. 

 

Предикаттардың



 бөлiм

Егер  сіз  clausesтың  бөлiмiндегі  Visual  Prolog    тiлiндегi  программаның  

меншiгіндегі 

предикаттарды 

сипаттасаңыз, 

онда 


сiз 

predicatesтiң 

(предикаттар  ) бөлiмiнде  жариялауыңыз  керек; басқа  жағдайда  Visual  Prolog 

түсiнбейдi. Сiз предикатты хабарлаудың нəтижесiнде домендерге (түрлерге ) 

бұл предикаттың аргументіне жататынын хабарлаңыз. 

Visual 


Prolog 

кiрiстiрiлген 

(олардың 

жариялауға 

болмайды) 

предикаттардың толық жиынымен əкелiнедi,анықтама кiтабы олардың толық 

сипатын көрсетеді. 

Предикаттар  айғақтарға  жəне  ережелерге  тапсырма  бередi.  Барлық 

предикаттар  predicates  бөлiмінде  олардың  аргумент  типтерінің  (домендер) 

нұсқауы есептелінеді. 

Сіз  айғақтарыңыз  бен    ережелеріңіздің    жұмысын  iстейтін    (дəлелдер) 

объектілер  типін жарияласаңыз Visual Prolog  жұмысының тиімділігі  едəуiр 

өседi. 

Қолданбалы



 предикатты жариялау 

Предикаттың    жариялануы  сол  предикаттың  атымен  басталады,содан 

соң    дөңгелек  ашылатын    жақша  ішінде  нөл  немесе  предикаттың  үлкен 

доменді(тип) аргументі жалғасады: 

arguraent_typel  OptionalNamel,  argument_type2  OptionalName2  predicateName 

......, argument_typeN OptionalName3 

үтiр дəлелдiң (түр ) 


 

43

Əрбір  доменді  аргументтен  кейін,соңғы  аргумент  типінен  кейін 



жабылатын жақша қойылады.Атап өтемiз, clausesтың бөлiмiндегi ұсыныстан 

айырмашылығы декларация предикаты нүктемен  аяқталмайды, предикаттың 

доменді аргументі стандартты домен немесе domaines бөлімінде жарияланған 

домен болады. Аргументтің атын OptionalNameK деп  нұсқауға болады - бұл 

прогрмманың  оқылуын  жақсартады,  компилятор  аяққа  басатындықтан  оның 

орындалу  жылдамдығы білінбейді. 

Предикаттардың

 аттары 

Предикаттың  аты  реттеле  орналасқан    əрiптер,  цифрлар  жəне  астын 

сызылған  таңбалармен    басталуы  керек.  Əрiптердiң  регистрi  ешқандай 

мағына бермейді, дегенмен сiзге бiз (прологтың басқа болжамы да бұған жол 

бермейді  жəне  болашақта  Visual  Prolog-    -  болжам  6,  ол  да  бұған  тыйым 

салады) бірақ біз сізге предикаттың атының бірінші əрпін бас əріппен жазуға 

кеңес бермейміз. Предикаттың аты 250 символымен шектеледі. 

 

Домендерд



iң бөлiм

Дəстүрлi прологта тек – терм  типі бар.  Visual Prologта доменді барлық 

аргументтің предикаты ретінде жариялаймыз. 

Бiрнеше мысалдарды қарап шығамық. 

1. Осы мысал  предикаттардың домендерін қалай  құжаттауға көмектесетiнiн 

көрсетедi: 

Франк - 45 жасқа толған еркек. 

Стандартты  домендерді  қолана  отырып  ,  сiз  тиiстi  домен    предикатын 

қолдана аласыз: 

person.(symbol, symbol, integer) . 

Көп  жағдайларда  мұндай  жарияланулар  өте  жақсы  жұмыс  iстейдi. 

Дегенмен сiз программа  жазылғаннан кейін бiрнеше айлардан соң түзеткіңіз 

келді  дейік.Предикаттың  ұқсас  хабарламасы  сізге  ештеңе  айтпауы 

мүмкін.Керісінше,төменде  көрсетілгендей  бұл  предикаттың  декларациясы   

осы предикаттың аргументтерін ретке келтiруге көмектеседi: 

Domains 


name,sex = symbol 

age = integer predicates 

person (name, sex, age) 

Меншiктi  домендердiң  хабарлауының  бас  артықшылықтарының  бiрi, 

Visual Prolog типтердің қатесiн зерттеп отыра алған, мысалы: 

same_sex (X, Y):- person (X, Sex, _), person (Sex, Y, _). 

name  жəне  sex  symbol    ретінде  көрсетілгеніне  қарамастан,  олар  бір  біріне 

эквивалентті емес. Егер сiз оларды шатыстырсаңыз,  Visual Prolog сол қатенi 

анықтауға мүмкiндiк бередi.Бұл сiздiң бағдарламаңыз өте үлкен жəне күрделi 

болған  жағдайларда пайдалы болмақ. 

 

Domains 


product, sum = integer 

predicates 



 

44

add_em_up (sum, sum, sum) 



multiply_em (product, product, product) 

clauses 


add_em_up (X, Y, Sum):-Sum=X+Y. 

multiply_em (X, Y, Product):-Product=X*Y. 

 

Бұл  прогрмма  екi  операцияны  орындайды:  жинақтайы  жəне 



көбейтеді.Оған мынадай мақсат беріп көрейік: 

add_em_up (32, 54, Sum). 

Visual Prolog (Test Goal) былай жауап бередi: 

Sum=86 


1 Solution 

сіз программаға екi бүтiн санның қосындысын жібердіңіз. 

 

Декларация



 жəне ережелер 

Visual Prologта бірнеше кірістірілген стандартты домендер бар. Оларды 

domains 

бөлiмiнде 

декларарация 

типінде 


жəне 

 

сипатталмаған  



предикаттардың аргументінде қолдануға болады. 

 

Негiзгi домендер 4 кестеде сипатталған 



Домен 

Сипатталуы 

Іске асуы 

short 


Қысқа, таңбалы, сандық 

Барлық  платформалар  (-  32  768—32 

767) 16 бит 

ushort 


Қысқа, таңбасыз,сандық 

 

(0—65 535 ) 16 биттік платформалар 



long 

Ұзын, таңбалы, сандық 

 

барлық  платформалар  (-  2  147  483 



648-2 147 483 647) 32 бит 

ulong 


Ұзын, таңбасыз, сандық 

барлық  платформалар  (0-4  294  967 

295 ) 32 бит 

integer 


Таңбалы, 

сандық,  

тəуелді 

көлемді 


платформаға ие 

(- 


32 

768-32 


767) 

16 


биттік 

платформалар 

(-  2  147  483  648-2  147  483  647)  32 

биттік платформалар 

unsigned 

Таңбасыз, 

сандық,тəуелді  көлемді 

платформаға ие 

(0—65 535 ) 16 биттiк платформалар 

(0-4  294  967  295  )  32  биттік 

платформалар 

byte 


 

Барлық платформалар (0— 55 ) 8 бит 

word 

 

Барлық платформалар (0—65 535 ) 16 



бит 

dword 


 

Барлық  платформалар  (0—4  294  967 

295 ) 32 бит 

 

Идентификаторла  жəне  жолдар  сіздің  программаңызда  бір-бірін 



ауыстыра алады,бірақта 

 

45

Visual 



Prologта 

олар 


бөлек 

сақталады. 

Идентификаторлар, 

идентификатор кестелерiнде сақталады, ал олардың көрінісіне оның кестедегі 

индексі  ғана  қолданылады,  бірақ  жолдардың  идентификаторы  емес.  Бұл 

идентификаторлардың 

қарама-қарсы 

қойылуы 


өте 

жылдам 


орындалатындығын  білдіреді,  ал  олар  программада  біренше  жерде 

кездессе,ондо  олардың  сақталуы  да  тығыз  болады.  Жолдар  іздеу  кестесінде 

сақталынбайды  жəне  қарама-қарсы  қоюдың  міндеттілігінде  Visual  Prolog  

оның символдарын біртіндеп тесереді.керек болса нышанға олардың нышаны 

тексередi.  Сіз  қай  домен  əрбір  прграммада  жақсы  қолданылатынын  өзiңіз 

шешесіз. 

 

Тапсырмалар 



Visual Prolog аяқталған телефондық анықтама секілді программаларды 

көрсетеді.  Тек  стандартты  домендер  пайдаланылғандықтан  оған  domains 

бөлiмінің программада қажеті жоқ. 

 

Predicates 



phone_number (symbol, symbol) 

clauses 


phone_number ("Albert " , "EZY-3665 " ). 

phone_number ("Betty " , "555-5233 " ) . 

phone_number ("Carol " , "909-1010 " ) . 

phone_number ("Dorothy " , "438-8400 " ) . 

goal 

 

программаны енгізіп, орындауға жібергеннен кейін рет-ретімен мақсаттарды 



еңгізіңіз. 

 

phone_number ("Carol " , Number) . 



phone_number ("438-8400 " Who, ). 

phone_number ("Albert " , Number). 

phone_number (Who, Number). 

 

Енді ұсыныстарды өзгертiңiз. Kim жəне dorothy  бiр телефон номеріне ие деп 



есептейік. Бұл айғақты сlauses бөлiмiне  енгізіп, келесі мақсатты енгіземіз: 

Рhone_number ("438-8400 " Who, ). 

Бұл сұраныстан сіз екі нəтиже алуыңыз керек: 

Who=dorothy 

Who=kim 

2 Solutions. 

 

Програмасындағы    сhar  доменiн  сипатау    үшін  isletter  предикаты 



пайдаланылады.  Тапсырама  барысында  оған  төменлегідей  мақсаттар 

қойылған: 

isletter(%). 


 

46

isletter(Q). 



"Yes" немесе "No" сəйкес келетін мағынасына қарай қайтарады 

Predicates 

isletter(char) 

clauses 


= > белгісі % таңбасын анықтайды. 

% мына теңдік "Алфавиттің  алдында  қойылады" 

isletter (Ch):-‘ а’< = Ch, Ch<=’z’. 

isletter (Ch ):-‘A’<= Ch, Ch<=’Z’ 

Программасын енгізіп, Test Goal -да əрбір мақсатты рет-ретімен сынап 

көріңіз: 

a ) isletter (‘х’).    

d ) isletter (a ) . 

b ) isletter (‘ 2 ‘ ).   

e ) isletter (X ). 

c ) isletter ("Hello " ). 

(c)  жəне  (d)  мақсаттары  қателіктің  түріне  алып  келеді,ал  (е)  мақсаты    жəне 

"Free  variable  "  (байланыспаған  айнымалы)  хабарламасын  қайтарады.  Сіз 

берілмеген объектінің а немесе  z-ке қатынасын тексере алмайсыз. 

 

Бақылау сұрақтары 



3.

 

Логикалық программалау тілдерінің мүмкіндіктері. 



4.

 

Тілдің құрылымы 



 

Есеп  беру  мазмұны  жəне  формасы:  Тапсырмалар  нұсқасын  құрастыру. 

Тапсырманы орындау реті. Орындау нəтижелері. Қортынды. 

 

2.3. Зертханалық жұмыс 3. Қолданбалы предикаттар



 

Мақсаты: Предикаттардың пролог ортасында қолданылу əдістері. 

 

Ереже  -  бұл  шындығы  кейбiр  шарттардан  тəуелдi  болатын  бекiту. 



Ереже  бастан  жəне  программа  бөліктерінен  тұрады  :-  егер  деп  оқылады. 

Ереже,  сонымен  қатар  айғақ,  нүктемен  бiтедi.  Бас  айнымалы  компоненттер 

ретiнде  бола  алатын  бұрын  суреттеп  айтылған  предикаттардың  бiрi  болып 

табылады.  Ереженiң  басы  бұл  ереже  анықтауы  үшiн  арналған  айғақ 

суреттейдi. 

Ереженiң  денесi  ереженiң  басы  шын  болды  үшiн  айғақтармен  дəйектi 

түрде  келiсуi  керек  үшiн  мақсаттар  суреттейдi.  Дене  үтiрлермен  немесе 

нүктелi үтiр айырық термдердiң тiзiмiнде болады. Сонымен бiрге: 

 :- орнына if тердi пайдалануға,  

, орнына and қолдануға, 

; орынына or 

қолдануға болады. 

 

 

Тапсырмалар



 

47

2-зерханалық  жұмыс  тапсырмаларын  қарап  қарапайым  математикалық 



өрнектерді шешу мысалдарын көрсетіңіз. 

 

 



Бақылау сұрақтары 

1.

 



Математикалық функциялар қалай сипатталады. 

2.

 



Шамалардың қандай түрлері бар. 

 

Есеп  беру  мазмұны  жəне  формасы:  Тапсырмалар  нұсқасын  құрастыру. 

Тапсырманы орындау реті. Орындау нəтижелері. Қортынды. 

 

 



2.4. Зертханалық жұмыс 4. Рекурсия жəне циклдарды ұйымдастыру 

 

Мақсаты:  Турбо  Пролог  ортасында  рекурсивті  есептерді  шешу  əдістерін, 

арифметикалық амалдардын іс−жүзінде қолдану.  

 

Көптеген 



қарапайым 

арифметикалық 

есептеулер 

итерациалық 

бағдарлама  көмегімен  берілуі  мүмкін.  Мысалы,  факторларды  есептеу 

циклдардың  көмегімен  орындалып,  тізбектер  сандарға  көбейтіліп,  керекті 

факториалды  алуға  болады.  Керекті  процедура  Паскаль  тілінде  жазылып, 

төменде көрсетілген.  



1-мысал. Факториалды есептеу. 

real factorial (N: integer);  

var i: integer ;  

f: real ;  

begin  

i:=o; f:=1; 



While (i

begin  


i:=i+1; f=f*i  

end;  


factorial:=f  

end;  


Пролог  тілінде  итерациялық  құрылымдағы  мұндай  бағдарлама  жоқ. 

Рекурсивті  жəне  итерациялы  алгоритімдерді  рекурсия  қолданылады. 

Итерацияның  рекурсиядан  негізгі  мүмкіншілігі  тиімділігінде,  ең  маңызды 

тиімділігі  жадыны  қолдануы.  Əрбір  рекурсивті  шақыруда  рекурсияны 

орындау  белгілі  бір  уақытқа  дейін  аяқталмай,  байланысқан  ақпараттарды 

сақтауды талап етіп, мəліметтердің құрылымын анықтау, стек фрагменті деп 

аталады.  

Стек  -арнай  мəліметтер  құрылымы,  элементері  келесі  қасиеттерге 

байланысты болады: соңғы болып стекқа келген, алды болып стектан кеткен. 

Стек  элементтері  берілуіне  байланысты  реттелген,  сырттан  тек  стек 

төбелеріне ғана қатынауға болады.  


 

48

Элементтер  төбелеріне  жетсе,  онда  стектің  жаңа  төбесі  элемент 



орналасқан  төбенің  алдындағы  төбесі  болады.  Егер  стекке  жаңа  элемент 

қосылса, онда ол стектің жаңа төбесі болады.  

Есептеудегі  жады  өлшеміне  процедураға  n  рекурсивті  қатынауы  кіріп, 

n-ге  сызықты  байланысты  болады.  Бағдарламаның  орындалу  кезінде  стектің 

толып  кетуін  қадағалау  керек,  өйткені  нəтижесінде  бар  мəліметтерді 

жоғалтып алу мүмкін. Рекурсивті бағдарламадан итерациялы бағдарламаның 

айырмашылығы  шектелген  жады  көлемін  қолданып,  итерация  санына 

байланысты болмайды.  

Турбо  Пролог  бағдарламасында  қайталанатын  іс-əрекеттерде  рекурсия 

қолдануға  болады.  Турбо  Пролог  тілінде  бүтін  санның  факториалын 

есептейтін  бағдарлама  жазайық.  5.4  бағдарлама  екі  ережеден  тұрып,  оның 

бірі рекурсивті болады. Байқайтынымыз рекурсивті ереже үш ішкі мақсаттан 

тұрып,  ал  соңғы  ішкі  мақсат  Fact  X=X+FactY,  X-санының  факториалын 

есептеп жəне X-1 факториал саны FactY -айнымалысының мəні болмайынша 

есептелмейді.  



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет