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



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

 

Ішкдеректер базаларын қолдану 

Visual  Prolog  реляциялық  деректер  қорын  ұсынатындығы  бұл  фак  тов 

коллекцияны,  сiз  iшкi  деректер  базаларына  сұрау  салулары  ол  қуатты  тiл 

ретiнде  қолдана  аласыз.  Болғанша,  Visual  Prolog-ш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  айырмашылық  мұндай  предикаттардың 

хабарлауы  predicatesтiң  бөлiмi  орынына  factsтың  бөлiмiнде  орналастырған 

тұрады. Ғибраттанушыда: 

 

domains 



name = string 

sex = char 

facts 

person(name, sex) 



clauses 

person("Helen", 'F').  

person("Maggie", 'F').  

person("Suzanne", 'F').  

person("Per", 'M'). 


 

68

сiз ("Maggie \" \, \ F \) personнiң барлық əйелдерiн табылу үшiн (Name, \ F \) 



personның  мақсаты  бар  person  шақыра  аласыз,  немесе  Maggieнiң  аты 

бойынша əйел сiздiң деректер қорыңызға бар болатын тексеру үшiн. 

Factsтың  бөлiмiндегi  предикаттарын  беттерiнше  табиғатына  əрдайым 

детерминация  жасамалған.  Айғақтар  өйткенi  бағдарламаның  орындауы, 

компилятор  уақытында  кез  келген  уақытта  қосыла  алады  əрдайым  iздестiру 

барысында  қайтарумен  талғаулы  шешiмдерi  табу  мүмкiндiгi  бар  болатынын 

есепке  алуы  керек.  Егер  бөлiмде  үшiн  бiр  айғақтан  астам  болмайтын 

предикат  facts  барып  тұр,  онда  сiз  бұл  (егер  предикат  əрдайым  бiр-ақ  айғақ 

алуы  керек  немесе  singleнiң  маңызды  сөзi)  determнiң  маңызды  сөзiнiң 

айғағының предикатты тануын алдыңызда жазып декларация жасай аласыз. 

facts 

determ daylight_saving(integer) 



 

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

предикаты  үшiн  жаңа  айғақ  сiз  қатенi  алыңыз  талпынғанда  қосылғанын 

байқаймыз. 



 

Iшкдеректер базасының жаңартуы 

Деректер  базасының  предикаттары  үшiн  айғақтар  бұл  соңғы  мысалда 

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

Фак  сенi  орындаулар  уақытында  қосылуға  жəне  предикаттар  төменде 

айтылған  қолдана  алып  тастала  аласың.  Сонымен  бiрге  айғақ  clausesтың 

бөлiмiндегi  компиляция  нақтылы  уақытында  алып  тасталуға  болады,    олар 

орындау  уақытында  қосылған  айғақтардан    негізгі  айырмашылығы  бола 

алады. 


Айғақтары  бар  жұмыс  үшiн  үйреншiктi  предикаттар  Visual  Prolog: 

assert,  asserts,  assertz,  retract,  retractall,  consult  жəне  save  -  бiр  немесе  екi 

дəлелдердi  иемдене  алады.  Мiндеттi  емес  екiншi  дəлел  iшкi  деректер 

базасының аты болады. 

/1  жəне  /2  белгi  предикаттың  осы  болжамы  үшiн  дəлелдердiң  керек  санын 

предикаттың  əрбiр  атынан  кейiн  көрсетедi.  ((i  )  */  жəне  (o,  i  )  */)  /*)  сондай 

/*лар)  түсiнiктер  предикат  ол  үшiн  параметрлердiң  (жəне  )  ағындарының 

көрсетедi. 

Бағдарламаның орындауы айғақтардың енгiзуi уақытында 

Айғақтар  орындаулар  уақытында  предикаттардың  арқылылардың 

айғақтарының  iшкi  деректер  қорына  қосыла  алады:  assert,  assertaлар  жəне 

assertz, немесе файлдан айғақтардың жүктеуi жолымен consultтар арқылы. 

Орындау  бiр  айғақтың  қосымшасы  үшiн  үш  предикат  уақытында  бар 

болады: 


asserta(

 

%   (i) 



asserta(,   facts_sectionName) 

%   (i,   i) 

assertz(

 

%   (i) 



assertz(,   facts_sectionName) 

%   (i,   i) 

assert(

 

%   (i) 



 

69

assert(,   facts_sectionName) 



%   (i,   i) 

     Asserta  предикат  осы  предикат,    assertz  үшiн  бар  айғақтардың  алдында 

айғақтарының  деректер  қорына  жаңа  айғаққа  қыстыртады  айғақтар  осы 

предикаттың  бар  айғақтарынан  кейiн  қыстыртады.  Қолдануы  assertтың 

предикаттары нəтиже бередi, assertzдың қолдануын ыңғайлы 

Деректер 

базасының 

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

аттары 

болғандықтан  



бағдарламаның  iшi  сирек  кездесетiн  немесе  (жергiлiктi  айғақтардың 

бөлiмдерi  үшiн)  модул,  asserta  жəне  айғақтардың  деректер  қорына  айғақ 

толықсытуы  керек  болатын  assertzдың  игi  үшiн  əрдайым  белгiлi.  Дегенмен 

түрдiң  тексеруi  айғақтардың  деректер  қор  тиiстi  мақсаттарындағымен 

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

үшiн сол үшiн. 

Ғибраттанушыны бiрiншi предикат Suzanne туралы personның предикат 

суреттеп  айтылған  айғақ  personның  қазiргi  мезет  жад  сақталған  барлық 

айғақтарынан  кейiн  қояды.  Екiншi  -  personның  предикатының  барлық  бар 

айғақтарының  алдында  Michael  туралы  айғақ.  үшiншi  -  John  туралы  айғақ 

likesDatabaseнiң  айғақтарының  деректер  қорына  likesтiң  барлық  басқа 

айғақтарынан кейiн, төртiншi Shannon туралы айғақты қояды 

 

assertz(person("Suzanne", "New Haven", 35)).  



asserta(person("Michael", "New York", 26)). 

assertz(likes("John",   "money"),   likesDatabase).  

asserta(likes("Shannon",   "hard work"),   likesDatabase). 

 

Деректер базасының бұл предикаттардың шақыруынан кейiн көрiне сiз 



басталған жұмыссыз келесi айғақтармен сияқты сияқты: 

% Iшкi деректер базасы - dbasedom 

("Michael \" \, "New York \" \, 26) person. 

%.0....   person.... басқа айғақтар.  

("Suzanne \" \, "New Haven \" \, 35) person. 

% Iшкi деректер базасы - likesDatabase 

("Shannon \" \, "Hard work \" \) likes. 

%.0....  likes.. басқа айғақтар.  

("John \" \, "Money \" \) likes. 

Ылғи  бiр  айғақ  екi  рет  бекитiн  кодқа  жазуға  қапылыста  сақтаныңыз.  Iшкiсi 

деректер  базалары  ешқандай  да  қайталанбаушылықтарды  ескермейдi, 

сондықтан ылғи бiр айғақ айғақтардың iшкi деректер қорында сан рет көрiнiп 

қала алады. Қайталанбаушылыққа тексеруi бар assertтың болжамын дегенмен 

өте оңай жазу: 

 

 

facts – people 



person(string, string) 

predicates 

uassert(people) 


 

70

clauses 



uassert(person(Name, Address)):- 

person(Name, Address),  

; % OR  


assert(person(Name, Address)). 

      Файлдан айғақтарының оқуы 

    Consult  предикат  factsтың  бөлiм  суреттеп  айтылған  айғақтар  fileNameнiң 

файлынан  оқиды,  жəне  олардың  соңында  тиiстi  деректер  базасының  сiздiң 

бағдарламаңызына  қыстыртады.  Consult  предикат  бiр  немесе  екi  дəлелдi 

алады: 


consult(fileName) 

 

 



%   (i) 

consult(fileName,  databaseName) 

 

 %   (i,   i) 



 

    Егер  сiз  тек  қана  (деректер  базасының  атысыз)  бiр  дəлелмен  consult 

шақырсақ,  дегенмен  assertzдарға  қарағанда,  онда  тек  қана  бөлiмде 

(dbasedomның үндемеу бойыншасына) атсыз сипатталған айғақтар саналады. 

     Егер сiз (деректер базасының файл аты жəне аты) екi дəлелдерi бар consult 

шақырсаңыз,  онда  көрcетiлген  деректер  базасынан  тек  қана  айғақтары 

тексерiледi.  Егер  файл  бiрдеңенi  көрcетiлген  базасының  айғақтарынан  басқа 

əлi  болса,  онда  ол  бұл  жолға  дейiн  жеткенде  consultтiң  предикаты  қатенi 

қайтарады. 

Consultтың  предикаты  айғаққа  бiр-бiрдендерi  оқитынын  көңiл  аударыңыз. 

Егер  файл  он  айғақтарда  болса,  жетiншi  айғақта  қандай  болмасын 

синтаксистiк  қателiк,  consultте  болады  айғақтардың  деректер  қорына  алты 

бiрiншi айғақтарын енгiзiледi, кейiн қателiк туралы хабар сiз не бередi. 

Consultтың предикаты тек қана сол saveны құратын қалыптағы файлдары оқи 

алатынын атап өтемiз. Файлдар болуы керек: 

 



екi  тырнақшалардағы  жолдары  iшiнде  отыратын  жоғарғы  регистрдiң 

нышандары, ерекшелiкке; 

 

жолдар екi есе шығын iшiнде отыратын кемшiлiктер, ерекшелiкке; 



 

түсiнiктер; 



 

бос жолдар; 



 

(symbol ) идентификаторлар екi тырнақшаларсыз. 



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

сақтауы керек. 

Бағдарламаның орындауы айғақтардың алып тастауы уақытында 

Retract  предикат  айғақтар  бiр  iзге  салады  жəне  олардың  iшкi  деректер 

базасынан алып тастайды. Ол келесi қалыбы болады: 

retract(

%(i) 

retract(, databaseName)     % (i, i) 



Retract  предикат    айғақпен  бағдарламаның  орындалуы   

еркiн  айнымалы  уақытында  ұластыра  дəл  келетiн  сiздiң  деректер  қорыңыз 

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


 

71

қосымша  эффектпен  оған  рұқсат  туралы  iшкi  деректер  базасынан 



айғақтарының алып тастауы баламалы. ,егер деректер базасының retract алып 

тасталатын  предикат  болса,  retract  детерминация  жасамалған  болып 

табылады,  жарияламады  детерминделген.  Болғанша,  retract  предикат 

iздестiруде  қайтарумен  олар  барлық  бiр  iзге  салынған  айғақтар  алып 

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

бiтедi. 


Болжаймыз, сiздiң бағдарламаңызға facts:ның келесi бөлiмдерiнде болады 

facts 


person(string, string, integer) 

facts – likesDatabase  

likes(string, string)  

dislikes(string, string) 

clauses 

person("Fred", "Capitola", 35).  

person("Fred", "Omaha", 37).  

person("Michael", "Brooklyn", 26). 

 

likes("John", "money").  



Likes(''Jane", "money"). 

likes("Chris", "chocolate").  

likes("John", "broccoli"). 

 

dislikes("Fred", "broccoli").  



dislikes("Michael", "beer"). 

Visual Prolog келесi мақсаттар facts мұндай бөлiмдерi бола беруге болады: 

retract(person("Fred",  _,_)), 



retract(likes(_,   "broccoli")), 



retract(likes(_,   "money"),   likesDatabase), % 

retract(person("Fred",  _,  _),   likesDatabase). 



Бiрiншi  мақсат  dbasedomның  деректер  базасынан  Fred  туралы 



personның  бiрiншi  айғағы  алып  тастайды.  LikesDatabaseнiң  деректер 

базасынан екiншi мақсаттары ("Broccoli \" X, \) likesпен беретiн бiрiншi айғақ 

алып 

тасталады. 



Деректер 

базасының 

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

аттары 


болғандықтан сирек кездесетiн:нен, екi мақсаттармен жағдайда, Visual Prolog 

базасынан  алып  тастау  өндiрiп  алатынын  бiледi  personы  предикат  тек  қана 

атаусыз айғақ, a likesтiң деректер қорында болады - тек қана likesDatabaseнiң 

базасында. 

үшiншi  жəне  төртiншi  мақсаттардың  қалай  сiз  екiншi  дəлелдiң  түрдiң 

тексеруi үшiн қолдана алатыныңызды көрсетедi. үшiншi мақсатты ойдағыдай 

жүзеге асырылады, likesDatabase ("Money \" _, \) likesiмен  бiрiншi айғақ алып 

тасталады  ,  төртiншi  мақсат  қатенi  бередi,  өйткенi  likesDatabaseнiң 

айғақтарының деректер қорына personның айғағы (жəне бола алмайды) жоқ. 

Қателiк туралы хабар төмендегiше көрiнедi: 

506 Type error: The functor does not belong to the domain.  


 

72

Түрдiң қатесi:   Функтор осы доменге жатпайды 



 

Келесi  мақсатты  қалай  сiз  retract:ның  предикатынан  мəнi  ала 

алғаныңызды мысал келтiредi 

goal 


retract(person(Name, Age)),  

write(Name, ", ", Age), nl,  

fail. 

Ретiнде  екiншi  retractтың  дəлелi  сiз  қашан  деректер  базасының  аты,  сiздi 



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

ат  нұсқайдымауыңыз  мүмкiн.  Retract  осы  жағдайда  барлық  айғақтары  iздеп 

алып тастай деректер қор көрcетiлген. Мысалға: 

goal 


retract(X, mydatabase), 

write(X), 

fail. 

Бiрнеше айғақтардың алып тастауы бiрден 



Retractall  предикат    туралы  дəл  келетiн  барлық  айғақтар  сiздiң 

деректер  базасыңыздан  алып  тастайды.  Retractall  предикат  келесi  қалыбы 

болады: 

 

retractall(



retractall(, databaseName) 

 

Тап қалған əсерге retractall əсер сол сияқты 



 

retractall(X):- retract(X), fail.  

retractall(_). 

оны бiрақ едəуiр тез. 

Анық, retractall предикатты əрдайым ойдағыдай бiтедi. Мəннiң retractall 

шығудан  алынсын  мүмкiн  емес.  Бұл  бiлдiредi,  үшiн  астын  сызу  еркiн 

айнымалы  нышанды  пайдалану  керек  notтiң  жағдайында  сонымен  қатар 

нышанды пайдалану керек. 

Осылай,  сонымен  қатар  assert  жəне  retractтiң  предикаттарының 

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

retractallдың  шақыруы  астын  сызу  символы  қолданылса,  жəне,  retractтың 

предикатының жағдай, онда factsтың көрcетiлген бөлiмiнен барлық айғақтар 

алып тастауға болады. 

Келесi  мақсат  person:ның  айғақтары  бар  деректер  базасынан  еркектерi 

туралы барлық айғақтар алып тастайды 

retractall(_, mydatabase). 

Келесi  мақсат  mydatabaseның  базасынан  барлық  айғақтары  алып 

тастайды 

retractall(person(_, _, _, male)). 

 


 

73

Determ кілт сөзімен айтқанда жариялалған айғақтар

Determ  маңызды  сөз  деректер  базасы  осы  қорытып  айтқанда 

жариялалған деректер базасының предикаты үшiн айғақ аспайтын бiр го бола 

аeterm Ключевоемен қорытып айтқанда жариялалған айғақтар. 

Determ  маңызды  сөз  деректер  базасы  осы  Ключевоеден  қорытып 

айтқанда  жариялалған  деректер  базасының  предикаты  үш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н 

бұл пайдалы. 

Determ  жариялайтын  айғақтың  алып  тастауында  retract/1  жəне 

retract/2дiң  детерминация  жасамалған  предикаттарының  шақыруы  детерм 

болады əсiресе көңiл аударыңыз. Егер сiз сiз жаза аласыз деректер базасының 

уақыты  кез  келген  уақытта  counterда  бiр  айғақтан  аспайтын  болатынын 

бiлсеңiз, сондықтан: 

facts 

determ counter(integer CounterValue) 



goal 

… 

retract(counter(CurrentCount)),  % Пролог не установит точку отката  



Count= CurrentCount +1 

assert(counter(Count)), 

вместо 

facts 


counter(integer CounterValue) 

predicates 

determ retract_d(dbasedom) 

clauses 


retract_d(X): - retract(X), !. % детерминированный предикат 

goal 


retract_d(counter(CurrentCount)), % Пролог не установит точку отката  

Count= CurrentCount + 1,  

asserta(counter(Count)), 

 

Single Кілт сөзімен айтқанда жариялалған айғақтар


 

74

Single  маңызды  сөз  деректер  базасы  single  Ключевоемен  қорытып 



айтқанда  жариялалған  деректер  базасының  предикаты  үшiн  бiр-ақ  айғақта 

əрдайым болатынын анықтайды. 

Айғақтар  (бiр  рет  )  single  сондықтан  бағдарлама  мақсат  шақыратында 

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

clausesтың тараулардасына аты-жөнiн көрсетуi керек. Мысалы: 

facts - properties 

single numberWindows_s(integer) 

clauses 


numberWindows_s(0). 

 

Бiр  рет  айғақтар  алып  тастала  алмайды.  Егер  сiз  бiр  рет  айғақ, 



компилятор  алып  тастап  көрiңiз  қатенi  шығарсаңыз.  Жетi  компилятор 

жағдайлардың  көпшiлiгiнде  компиляция  бiр  рет  айғақтың  алып  тастауын 

талпынысты кезеңде анықтау. 

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

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

бiтпейдi. 

Мысалы, келесi шақыру: 

numberWindows_s (Num) , 

егер Num-еркiн айнымалы болса жүнi жығылумен ешқашан бiтпейдi. Демек, 

procedureның детерминизмiнiң түрiмен жариялалған предикаттардағы бiр рет 

айғақтарды ыңғайлы қолдану. 

Assert,  asserta,  assertz  жəне  consultтiң  singleнiң  айғақ  қолданылған 

предикаттары  retract  жəне  assertтiң  предикаттарының  булары  сол  сияқты 

жұмыс  iстейдi.  (consult  )  assert  предикаттар  атап  айтқанда  айғақтың  қазiргi 

данасы көрcетiлгенге жаңа өзгертедi. 

Компи  лятору  айғақтың  декларациясының  алдында  single  сөздер 

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

оптимизациялалған 

кодты 

жасауға 


мүмкiндiк 

бередi. 


Мысалы, 

компилятордың  assertтың  бiр  рет  айғақ  қолданылған  предикаттары  үшiн 

retract  жəне  assertтiң  детерминделген  (жəне  retract  жəне  assertтiң 

предикаттары  пара  ретiнде  əсiресе  қолдануда  (детерминация  жасамалған  ) 

айғақпен)  кəдiмгi)  айғақ  қолданылған  предикаттары  параға  қарағанда 

тиiмдiрек жұмыс iстейтiн код шығарады. 

Нетривиалдың  (үшiн  қай  үндемеу  бойыншаға  мəндерiнде  болмайды) 

кейбiр домендерi үшiн бiр рет айғақтардың инициализациясы 

 

global domains  



font = binary 

facts - properties 

single my_font(font) 

clauses 


my_font($[00] ) 

 


 

75

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



рет  айғақтардың  инициализациясы  болып  табылады.  Ref  домен  сыртқы 

деректер  қорларындағы  сiлтеме  сандары  үшiн  домен  Visual  Prolog  болып 

табылады, бiрақ сонымен бiрге ол Visual Prolog берiлетiн пакет жариялалған 

көпшiлiгiнде  алдын  ала  анықталған  домендердi  қолданылады.  Мысалы,  VPI 

window-шi негiзгi домен осылай жариялаған: 

domains 


window = ref 

Сiз  refтың  доменiнiң  мəндерiнiң  инициализациясы  үшiн  ()  )  ерекше 

алдыңғы  нышаны  бар  таңбасыз  сандар  қолдана  алатыныңызды  көңiл 

аударыңыз. Мысалы, жазуға болады: 

facts 

single mywin(WINDOW) 



clauses 

 

mywin(~0). 



Iшкi деректер базасының қолдануының мысалдары. 

1. 


Листинг151)  ch08e01.pro  бағдарлама  -  мысал  iшкi  деректер  базасы 

көмегiмен  классификациялық  сарапшылық  жүйенi  жазатын  тұрып  қал. 

Мысал бұндағы деректер базасының қолданулары маңызды артықшылық сiз 

бағдарлама (жəне олар алып тастау) өнер-бiлiм ЄдЄ толықсыта алатын болып 

табылады. 

 

Ch08e01.pro Листинг151 бағдарлама. 



domains 

  thing = string 

  conds = cond* 

  cond  = string 

 

facts 


  is_a(thing,thing,conds) 

  type_of(thing,thing,conds) 

  false(cond) 

 

predicates 



  run(thing) - nondeterm (i) 

  ask(conds) - nondeterm (i) 

  update - procedure () 

 

clauses 



  run(Item):- 

 

is_a(X,Item,List), 



 

ask(List), 

 

type_of(ANS,X,List2), 



 

ask(List2), 

 

write("The ", Item," you need is (a/an) ", Ans),nl. 



 

76

 



  run(_):- 

 

write("This program does not have enough "), 



 

write("data to draw any conclusions."), 

 

nl. 


 

  ask([]). 

  ask([H|T]):- 

 

not(false(H)), 



 

write("Does this thing help you to "), 

 

write(H," (enter y/n)"), 



 

readchar(Ans), nl, Ans='y', 

 

ask(T). 


 

  ask([H|_]):- 

 

assertz(false(H)), fail. 



 

  is_a("language","tool",["communicate"]). 

  is_a("hammer","tool",["build a house","fix a fender","crack a nut"]). 

  is_a("sewing_machine","tool",["make clothing","repair sails"]). 

  is_a("plow","tool",["prepare fields","farm"]). 

 

  type_of("english","language",["communicate with people"]). 



  type_of("prolog","language",["communicate with a computer"]). 

 

  update:- 



 

retractall(type_of("prolog","language",["communicate with a computer"])), 

 

asserta(type_of("PDC Prolog","language", 



 

 

 



 

["communicate with a personal computer"])), 

 

asserta(type_of("prolog","language", 



 

 

 



 

["communicate with a mainframe computer"])). 

 

goal 


  run("tool").  

Келесi айғақтар бола алар ма едi assertaы предикаты арқылы енгiзiлген 

немесе  assertz,  немесе  файлдан  consultы  предикаты  арқылы  саналған.  Олар 

мысал бұл дегенмен clausesтың бөлiмiнде орналастырған. 

is_a("language","tool",["communicate"]). 

  is_a("hammer","tool",["build a house","fix a fender","crack a nut"]). 

  is_a("sewing_machine","tool",["make clothing","repair sails"]). 

  is_a("plow","tool",["prepare fields","farm"]). 

 

  type_of("english","language",["communicate with people"]). 



  type_of("prolog","language",["communicate with a computer"]). 

Мақсаттар ретiнде енгiзiңiз: 



 

77

goal 



run (tool) . 

Келесi мақсатты ендi енгiзiңiз: 

update,   run(tool). 

Update  предикат  бағдарламаның  бастапқы  кодына  қосылған,  айғақ  алып 

тастайды 

type_of(prolog,   language,   ["communicate with a computer"]). 

 

из  внутренней  базы  фактов  knowledgeBase  и  добавляет  два  новых  факта  в 



программу: 

 

type_of(prolog,   language, 



["communicate with a mainframe computer"])  

type_of("Visual Prolog",   language, 

["communicate with a personal computer"]) 

Оның дəлелдерi аттары бар save/2 мəтiндiк файл жəне деректер базасы 

предикаты  шақыруы  арқылы  ретiнде  knowledgeBaseның  айғақтарының 

мəлiметтерiнiң  мəтiндiк  файлындағы  барлық  базасыны  сақтауға  болады. 

Мысалы, шақырудан кейiн 

save(''mydata.dba", knowledgeBase) 

mydata.dba  файл  Visual  Prolog,  жəне  əрбiр  айғақты  ұқсас  кəдiмгi 

бағдарламаның  clausesтың  бөлiмiне  болады  жеке  жолда  жазып  алады.  Бұл 

файлдан жадқа айғақтары consultы предикаты арқылы санауға болады: 

consult("mydata.dba",   knowledgeBase). 

2.   Сiз (factsтың тарауларда суреттеп айтылған айғақтармен) деректер базасы 

предикаттар  олар  термдермен  болып  табылады  сияқты  сияқты  суреттейтiн 

айғақтармен манипуляция жасай аласыз. 

Айғақтардың  базасын  тануларының  жанында  Visual  Prolog  iшкi  домен, 

factsтың бөлiмiнен тиiстi айғақтарына шығарады. Мысалы. 

предикаттар ол үшiн домен 

 

(name, telno) person 



 

(cno, cname) city 

 

Мұндай  хабарлаулар,  Visual  Prolog-шi  компилятор  алынып  шығарады 



dbal:ның доменi щийға сəйкес келемiн 

domains(name, telno) dbal = person; citytcno, cname 

Бұл  dbalдың  доменi  бола  алады  қолдану.  Мысалы,  my_consultтың 

предикатының  жасаулары,  consultтың  ұқсас  үйреншiктi  предикаты,  сiз  үшiн 

readtermның үйреншiктi предикаты қолдана аласыз. 

Қорытынды 

Бұл басшыға келесi маңызды моменттер қарап шыққан. 

 



Visual  Prolog-шi  iшкi  деректер  базасы  factsтың  бөлiм  шумақталған 

сiздiң  бағдарламаларыңыздың  айғақтарынан  тұрады.  Қолданушымен  facts 

сөзi  Ключевоесi  арқылы  жариялау  мүмкiн  айғақтардың  топтары  бұл  сөзi 


 

78

Ключевоесi 



арқылы 

жариялау 

мүмкiн 

қолданылатын 



анықталатын 

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

 

Facts бөлiмдерге (қай тиiстi iшкi домендердi құрады) ат қоюға болады. 



Factsтың  атаусыз  бөлiмi  үшiн  домен  үндемеу  бойыншаға  bdasedomның 

доменi болады. Бағдарламада factsтың бiрнеше бөлiмдерi қатыса алады, бiрақ 

сонымен  бiрге  олардың  əрқайсылары  сирек  кездесетiн  ат  алуы  керек.  Фак 

товтың базасының предикаты facts бөлiмшең сипаттауға болады. 

 

Asserta,  assertz  жəне  consultтiң  үйреншiктi  предикаттары  көмегiмен 



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

толықсытуға  болады.  Retractтары  предикаттары  арқылы  жəне  retractall 

бағдарлама бұл айғақтар жұмыс уақытында алып тастауға болады. 

 



Iшкi деректер базасыдан  файлға save айғақтары предикат айғақтардың 

мұндай  файлын  редактор  арқылы  құрып  немесе  редакциялауға  болады, 

consultтың 

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

дəрменмене 

дейiн 


файлдан 

бағдарламаға 

айғақтары кiргiзуге болады. 

 



  Сiздiң  бағдарламаңыз  осы  сияқты  бағдарламадағы  деректер  базасы, 

сонымен қатар барлық басқа предикаттарға предикаттарға қарай алады. 

 

Термдермен  ретiнде  жұмыс  iстеу  мүмкiн  factsтiң  бөлiмдерiнiң  аттары 



үшiн жұмыс iстеу мүмкiн шығарылған iшкi домендердiң қолдануында. 

Тапсырма: 

1.  Ти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таптарының атаулары. 

- авторлар жəне 2003 жылдан кейiн шығарылған кiтаптардың атаулары. 

- 2000 жылға дейiн шығарылған кiтаптардың бағасын. 

- 1999 жыл шығарылған кiтаптардың саны. 

- осы автордың кiтаптарының атаулары 

 

ҚОРЫТЫНДЫ 



 

Логика  элементтерін  ақпараттық  технологиялар  курсына  енгізу  тиісті 

қажетті  іс  болып  табылады  жəне  ол  аталған  оқу  құралының  басты  жетістігі 

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

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

Бүгінде  адам  санасының  мүмкіндіктерін  кеңейтетін  танымның  көптеген 

əртүрлі  əдістері  бар:  үлгілеу  жəне  математикалық  əдістер,  соның  ішінде 

ықтималдықтар  теориясының  əдістері,  физикалық  жəне  биологиялық 

эксперименттер,  ЭЕМ-да  ақпарат  өңдеу,  т.б.  Бірақ  барлық  осы  əдістерді 

тиімді  пайдалану  үшін  адамның  ойлауы  логикалық  дұрыс  болуы  керек, 

сондықтан  да  ғылым  ғана  логикаға  дұрыс  ойлау  заңдарын  тануға  үйретеді. 


 

79

Əрине,  адам  логиканың  дəл  ережелері  мен  заңдарын  білмей-ақ,  тек  оларды 



жоғары  деңгейде  қолдана  отырып  дұрыс  ойлай  алады.  Алайда  логикаға  ие 

адам  анағұрлым  дəл  ойлайды,  оның  аргументациясы  сенімдірек  екенін  де 

ұмытпау керек.  

Логикалық  ойлау  туа  бітетін  қасиет  емес,  сондықтан  оны  əртүрлі 

əдістермен  дамытуға  болады.  Логиканы  жүйелі  меңгеру  –  осы  бағыттың 

анағұрлым тиімді жолдарының бірі. 

 

   



         Логикалық  программаның  идеялық  тамыры  математикалық  логикада, 

математиктердің  логикалық  формуланы  жəне  формальді  анықтау  əдісін 

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

формальді сипаттау əдісін ашуға септігін тигізеді. 

Пролог    тілі  программа  құруға  үйретуде  кеңінен  қолданылып,  ойлау 

қабілетін  жетілдіреді  жəне  құрылымдалмаған  программа  жазуға  мүмкіндік 

береді. 

 

Оқу  құралында  Visual  Prolog  логикалық  программалау  тілінің 



теориялық материалдары жəне зертханалық  жұмыстары даярланған.  

 

80

Пайдаланылған əдебиеттер тізімі



 

1.

 



Камардинов О. Жасанды интеллект, сараптаушы жүйелер, Пролог: оқу 

құралы. – Шымкент 2003 

2.

 

Каймин В.А. Информатика: учебник. – М.: ИНФРА-М, 2003. 



3.

 

 Калягин В.О. Интеллектуальная собственность. – М.: НОРМА, 2000. 



4.

 

Eduardo Costa «Visual Prolog 7.1 for Tyros». Перевод с английского. – 



Перевод: И. Алексеев, Е.А

Ефимова, 2008, М. Сафронов, 2007. 



Редактор перевода: Е.А. Ефимова, 2008. Оформление: М.Сафронов, И. 

Алексеев. – 2007. – С. 174. 

 

5.

 



Хакимова Т.Ақпараттық технологиялар пəнінде жасанды интеллекті оқыту. 

ИНФОРМАТИКА  НЕГІЗДЕРІ Республикалық- ғылыми əдістемелік 

журнал.№2,2011ж,.

 

6.



 

 Хакимова Т.Ақпараттық технологияларды оқытуда логикалық PROLOG  тілін 

пайдалану . МИФ

 

Республикалық оқу  əдістемелік журнал.№4, 27-29б.Алматы,2011ж,.



 

7.

 



 Хакимова Т.Жасанды интеллекті іс жүзінде пайдалану. ИНФОРМАТИКА  

НЕГІЗДЕРІ



.

Республикалық- ғылыми əдістемелік журнал.№1,Алматы,2012ж,9-13бет..



 

 


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




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

    Басты бет