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бет..
Достарыңызбен бөлісу: |