Ішкi деректер базаларын қолдану
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, сонымен қатар
басқа предикаттар. Жалғыз көрнект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лет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", _,_)),
%
1
retract(likes(_, "broccoli")),
%
2
retract(likes(_, "money"), likesDatabase), %
3
retract(person("Fred", _, _), likesDatabase).
%
4
Б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бет..
Достарыңызбен бөлісу: |