65
searchfile(PathList, Name, FoundName) % (i, i, o)Егер дискке түбірде
autoexec.bat орналасқан :, C тең FoundName орнайды : \AUTOEXEC.BAT.
Файлдың аты алмастырулар нышандары бола алады. Бұл жағдайда
алмастырулар нышандары болатын файлдан толық атымен сабақтас
FoundName болады, жəне төменде суреттеп айтылған тізбелер іздестіру
предикаттар үшін дəлелді сапада қолданылуы бұдан əрі мүмкін болу керек.
Егер алдыңғы мысалдың файлдың атының тап қалған сияқты *.bat орнына
мысалы autoexec.bat, сабақтас FoundName көрсетеді : \ *.ВАТ.
Предикат deletefile /1
Предикат deletefile оның берілген аргументтері мен формалары мен
берілген файлдарфн өшіріп тастайды. deletefile(OSFileName) % (1)
Егер файл алып тастай алмаса предикат қатені береді. OSFileName
біржолдық нышандар бола алмайды.
Предикат renamefile/1
Предикат renamefile NewOSFileName атынан OldOSFileName атын
өзгертіп жатыр. Ол өз формасын алады.
renamefile(OldOSFileName, NewOSFileName) % (i, i)
Егер NewOSFileName атымен файл болмаса предикат табысты
renamefile болып қалады, жəне екеуіде файлдық өзгерген аттармен сақталып
қалады. Жағымсыз жағдайда қате берған болады.
Предикат disk/1
Предикат ағымдағы диск өзгеруі үшін disk қолданып жатыр немесе
каталогта/подкаталота өз қалыпын алады :
disk(Path) % (i), (о)
Еркін айнымалы шақыруда параметрге сапада, ағымдағы тізбеге disk
қайтарылады. Бұл дискте қазіргі ағымдағы тізбесіз өзгеріссіз басқа дискке
ауыстырып қосу үшін DOS-Бағдарлаған болжамдарда D қолданылады:. D бұл
жерде – құрылым таңбалаушы əріп.
Предикат copyfile/2
Предикатта файлдың көшірмесін алу үшін copyfile қолданылады. Ол
екі параметрді қабылдайды :.copyfile(SourceName, DestinationName)
% (i,
i)
Файлдардың аттары толық немесе ішінара беріле алады, жəне бұл
файлдарға жолдар дисктер жəне тізбелерді қоса. Қайта құрылмалы
нышандарға тыйым салынған. Көшіріп алған атрибуттарын жəне құқықтарын
бастапқы файл алады.
2.10. Зертханлық жұмыс № 10.Visual- ға кiрiспе iшкi деректер базасы.
66
(internal fact databases ) iшкi деректер базасы сiз оны орындалуы
барысында Prologты сiздiң Visualдар тiлiндегi программасынан уақытында
тiкелей толықсытып алып тастай алатын айғақтардан тұрады. Сiз
бағдарламаның factsтың бөлiмiндегi iшкi деректер қорын жəне predicatesтiң
бөлiм суреттеп айтылған предикаттарды қолданылатын осы сияқты бұл
предикаттарды қолдануға суреттейтiн предикаттар жариялай аласыз.
Деректер қорына жаңа айғақтарының қосымшалары үшiн Visual Prolog
assert, asserta, assertzдың предикаттарын қолданылады, retract жəне
retractallдiң предикаттары қазiргi айғақтарды алып тастауы үшiн қызмет
көрсетедi. Сiз деректер базасындағы мазмұнын, сначасы айғақ (немесе бөп-
бөлiк айғақ) бұл айғақтың жаңа болжамын сонан соң қойылып алып тасталып
өзгерте аласыз. Consult/1 жəне consult/2 предикаттар файлдан айғақтары
оқиды жəне олардың iшкi деректер қор, a save/1 жəне save/2лерiне
толықсытады файлдағы iшiндегi iшкi деректер базаларын сақтайды.
Visual Prolog деректер қорына, кəдiмгi предикат с тəуелдi болып
фактiлердi түсiндiредi. Iшкi деректер базасының предикаттарының айғақтары
оңай өзгертуге болатын кестеде максимал жылдамдығының табысы үшiн
сонда кəдiмгi предикаттар екiлiк кодтарға құрастырады сақталады.
Iшкi деректер базасының хабарлауы(бұл əлдеқашанғы databaseның
сөзiнiң синонимы) facts маңызды сөз factsтың бөлiмдi тануын басты
анықтайды. Facts бөлiм тиiстi iшкi деректер база суреттейтiн предикаттарды
тiзбектен тұрады. Орындаулар уақытында assertaлары предикаттары арқылы
жəне assertz деректер базасына (бiрақ ереже емес) айғақтар толықсытуға
болады. Немесе, сiз дисктегi файлдан толықсытылатын айғақтары consultтың
үйреншiктi предикаты шақырып ала аласыз. Facts бөлiм ғибраттанушыда
көрiне алады
domainsname, address = stringage = integergender = male femalefacts(name,
address, age, gender) person
predicates(name, address, age) male
(name, address, age) female
(name, age, gender) child
clauses(Name, Address, Age) male:-
(Name, Address, Age, male) person.
Сiз мысал бұл (male, female, child) басқа предикаттарды қолданылатын
осы сияқтымен person предикатты пайдалана аласыз. Сiз бағдарлама
personның предикаты үшiн айғақтар жұмыс уақытында толықсытып алып
тастай алатын жалғыз айырмашылық.
Айғақтардың бөлiм жариялалған предикаттарға келесi екi шектеу атап өту
керек:
•
тек қана айғақтар деректер қорына толықсытуға рұқсат етiледi, бiрақ
ереже емес;
•
базасының айғақтары еркiн айнымалы бола алмайды.
67
Factsтың бiрнеше бөлiмдерiнiң бар болуына рұқсат етiледi, бiрақ ол үшiн
factsтың əрбiр бөлiмiнiң аты анық көрсетуi керек.
(integer ) myFirstRelation
mySecondRelationfreal, string
(string ) myThirdRelation
/* etc. */
Mydatabaseның аты бар factsтың бөлiмiнiң сипаттамасы mydatabaseның
аты бар айғақтардың деректер қорын құрады. Егер сiз iшкi деректер базасына
ат қоймасаңыз, онда ол үндемеу бойыншаға dbasedomның үйреншiктi атын
тағайындайды. Ол егер тек қана жобаның бiр бөлiгi сияқты жарияламайтын
тамырлы модулдың единстiнен тұрады бағдарлама айғақтардың жергiлiктi
атаусыз бөлiмдерi бола алатынын көңiл аударыңыз.
Деректер базасының предикаттарының аттары сирек кездесетiн
(бастапқы файл ) модул болуы керек; facts екi əр түрлi тараулардаларға
дикатов бiрдей аттар өте қолдануға болмайды. Дəл осылай facts жəне
predicatesтiң тараулардасына предикаттарының бiрдей аттары қолдануға
болмайды. Тарауларданың жергiлiктi facts нақтылы предикаттарының аттары
дегенмен, олар жариялайтын, жəне предикатов/фактовтың жергiлiктi
аттарымен қақтықпайды басқа модул жариялалған модул үшiн жергiлiктi
болып табылады.
Ішк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').