7-8 тақырып. Білімнің логикалық моделі.
Мақсаты: Ұйғарым, факт және ереже, предикат ұғымдарымен танысу. Мысалдар қарастыру.
Прологта берілгендер негізінен символдық типте қабылданады, бірақ онда басқа типтерді де пайдалануға болады. Мысалы, Турбо Прологта қолдануға болатын негізгі типтер: integer, real, char, symbol және string, ал жай Прологта тип сипатталады. Жалпы, Пролог әдеттегі Паскаль тілі сияқты процедуралық программалау тілдерінен жоғары деңгейлі тіл.
Әдетте тілде нысандар арасындағы қатысқа мысал келтірейік: «Мұрат; Сұлтанның әкесі.» Оның прологта жазылуы : Әке (мұрат, сұлтан). Мұндағы Мұрат пен Сұлтан нысандарының арасындағы қатыс ретті түрде сипатталған: Мұрат Сұлтанның әкесі, Сұлтан Мұраттың әкесі емес.
Ереженің әдеттегі тілде жазылуына мысал, Егер Сұлтан мен Жібек туыс болса, онда олардың ата – анасы бір. Ереженің Прологта жазылуы.
Tuis(sultan,jibek,),ata_ana(bir)
Әдетте атаулар (туыс, ата, ана, т.с.с. предикаттар мен аргументтер) латын әріптерімен жазылады. Прологтың оқи алауына байланысты, оларды орыс әріптері бойынша жазуға да болады. Кітапта олар көбінесе латын әріптерімен жазылды.
Жалпы, Пролог тілінде программалау мынадай кезеңдерден тұрады:
Нысандар мен олардың арасындағы қатыстар жөнінде біршама фактілер жариялау;
Нысандармен олардың арасындағы қатыстар жөнінде біршама ережелерді анықтау;
Нысандар мен олардың арасындағы қатыстар жөнінде сұрақтарды дайындау.
Мысалы, әке жөніндегі фактілер мен ережелер білім қоры ретінде Прологқа жазылған болсын. Біз Мұрат кімнің әкесі жөнінде сауал жіберсек, Пролог Мұрат жөніндегі барлық өзіне белгілерді (берілгендер қорын) қарап шығып, сәйкес жауап береді.Яғни, Пролог – жүйені жауап іздеуге пайдалану үшін арналған фактілер мен ережелердің қоймасы деп қарастыруға болады.
Прологты пайдаланатын салалар:
Сараптаушы жүйелерді дайындау;
Мәтіндерді бір тілден екінші тілге аудару;
Логикалық түрде теоремаларды дәлелдеу және т.б.
Пролог – сұқпаттық, жоғары деңгейлі тіл. Программаны Прологты іске асыру үшін арифметикалық амалдарды орындаудан басқа жағдайларда жүйеде негізгі мәліметтер(фактілер мен ережелер) сақтаулы болып, экранға шығарылуы одан әрі бір форматта қажетті сұрақ берілуі тиіс. Сұрақ түріне байланысты жүйенің жауабы ИӘ не ЖОҚ түрінде көрінуі мүмкін. Екінші сөзбен айтқанда Прологпен жұмыс істеу математикалық логикалық заңдары мен принциптеріне шамалас болып келеді.
Көп жағдайда Прологта пайдаланатын пікірлер түрлі құрылымды болып беріледі. Мұнда логикалық байланыстарды пайдаланып, берілген пікірлерден келесі күрделі пікірді алуға да болады.т.б.
Факт – нысандар жөніндегі мәлімет. Фактілер бірнеше нысанның не нысандар арасындағы қатынас қатыстардан тұруы мүмкін. Мысалы, әдеттегі түрде жазылатын фактілер:
Сұлтан – студент;
Ахмет, Маржан, Мәдина – оқу озаттары;
Ержан Маржанға кітап берді;
Прологта фактілер предикаттық түрде сипатталады:
<атау> <Арг> <арг>
Мысалы, жоғары фактілердің прологта жазылуы:
Student(sultan)
Oku_ozattary (axmet, marjan, madina)
beru (erjan, marjan, kitap)
Фактіде жай жақшалар алдында жазылған атау предикат делінеді. Егер ол бірнеше сөзден тұрса, сөздерді бір атау түрінде қабылдау үшін араларына астын сызу (-) белгісін қойып кету жеткілікті, мысалы оқу озаттары.Предикаттан соң жақшалар ішіне үтір арқылы бөлініп жазылатын атаулар аргументтер деп аталады.Мысалы, қарындас (нұрлан, жібек) фактісінде :қарындас – предикат, Нұрлан, Жібек – аргументтер.
Мұнда ескерілетін жайттар:
Прологта предикаттар мен аргументтер латын не орыс алфавиттерімен кіші әріптерінен бастап жазылады.
әр факт ақиқат ұйғарым түрінде қабылданады;
алдымен предикат, одан әрі нысан атаулары (аргументтер) үтір, (,) арқылы бөлінеді де олардың тізімі жай жақшаларға алынып жазылады.
әр фактінің соңына нүкте (.) қойылады.
Прологта фактіні сөйлем (ұйғарым, пікір) деп те атайды. Нысандар арасындағы қатыстан тұратын фактіні жазу және оқу кезінде алдын ала нысандардың жазылу ретін қалаған түрде дәл анықтап алу керек. Мысалы, әке (Мұрат, Сұлтан) фактісінің оқылу реті жоғарыда ескертілген болатын.Ретті еркін түрде анықтап қоюға болады. Мұнда фактілер «Сұлтан Мұраттың әкесі» деп оқу да мүмкін. Бірақ, алдын ала оқу ретіне келісіп қойсаңыз, одан соңғы тақырыптарды да ретпен оқуды сақтау керек.
Егер факт конъюнкциялы болса, ол үшін пайдаланылатын предикаттар үтір (,) арқылы бөлініп жазылуы тиіс. Үтір конъюнкция (және) логикалық операциясын білдіреді. Мысалы, Нұрғали Баянды ұнатады және Баян Нұрғалиді ұнатады күрделі фактісінің Прологта жазылуы:
Ұнатады (Нұрғали, баян), ұнатады (баян, нұрғалиді)
Фактінің конъюнкция құрайтын әр бөлімі мақсат не мақсатты ұйғарым деп те аталады.
Сұрақтар. Мақсатты ұйғарымды дәлелдеу. Қайту процессі.
Жауап алу үшін берілгендер қорына қойылатын сұрақ делінеді. Сұрақ пернетақтадан факт (лер) не ережелер түрінде енгізіледі, тек оның алдына арнайы символды енгізсе болатын арнайы символ – сұрақ белгісі мен одан соң енгізілетін сызықша (?-). Ол – жүйенің шақыру белгісі деп те аталады. Сұрақ соңынан нүкте (.) қойылады.Сұрақтың фактіден айырмашылығы оның алдына тек сұрақ белгісінің қойылуында емес, оның аргументтері үшін айнымалыларды не нақты мәндерге қосу айнымалыларды енгізуге болады.Егер сұраққа енгізілген мақсаттың аргументтері нақты мәндер болса, сәйкес жауап ИӘ не ЖОҚ түрінде беріледі, егер аргументтер айнымалылар болса, оларға сәйкес нақты мәндер шығарылады (прологта айнымалылардың бас әріптен бастап жазылуы міндетті). Сұраққа енгізілген және берілгендер қорында сақтаулы атаулар мен нақты аргументтердің бір – бірінен айырмашылығы болмауы тиіс.Яғни, сәйкес атауларды қысқартып жазуға болмайды. Ал айнымалыларды кез –келген символ не символдар тіркесі түрінде жазылуы мүмкін.
Прологта фактілер Мен сұрақтар жанына не алдына әдеттегідей түсініктеме енгізуге де болады. Ол /**/ символдарының арасына жазылады.
Жүйені оқи алу үшін тарауда қазақша атаулар латын не орыс әріптерін пайдаланып жазылған. Мысалы, қазақша ә , ң, ү, ұ, қ, ө, ж, ы, әріптері шамалас a, n, g, u, k, o, g, y, I латын әріптерімен, тіпті кей әріптер ағылшын әріптерімен алмастырылған. Егер енгізілетін қазақша аргументті жазу керек болса, оны тек тырнақшалар ішіне жазуға болады.
Мысалдар:
1.ana (gulnar) /*факт*/
…………….
?- ana(X) /*сұрақ*/
X=gulnar /*жауап*/
2.?_unatady (axmet,kitap) /*сұрақ*/
да /*жауап*/
3.?_unatady (aldanazar, marjan) /*сұрақ*/
Жоқ /*мұндай факт берілгендер қорында жоқ*/
4/?_ baga (X,5) /*бағасын алғандар кімдер*/
X-erjan
X=marjan
Ескертулер.
1) егер сұраққа берілетін сәйкес жауаптар көп болса, бірінші жауап басылып шығарылған соң, пернетақтадан нүктелі үтір(;) пернесін басу керек. Ол – жүйенің сәйкес мәндерді одан әрі іздеу белгісі.
2) Егер «;» символы енгізілмесе, жүйенің кейбір нұсқалары «Басқа шешім керек пе (иә/жоқ) ?» сұрағын шығаруы мүмкін. Егер оған иә деп жауап берілсе, пролог – жүйе соңғы берілген жауапты есінде сақтап, сол жерде әрі қарай үйлесімді басқа жауаптарды іздей бастайды.Егер басқа жауап алынбаса, « Басқа жауап жоқ» деп хабар береді.
3) Бірінші мысалда берілген сұрақтың орындалуы үшін жүйеде фактілер осы мысалдағы сияқты фактілер түрінде сақталуы тиіс. Турбо Пролог сұрақ сұхбаттық терезеде беріледі. Мысалы Цель:ana (X) команданың берілу тәсілі төменде және 3.7. – тақырыпта баяндалады.
4- сұрақты беру алдында Турбо Прологта программаны мынадай түрде дайындап, компиляциялау және сақтау керек.
Predicates
Baga (string, integer)
Clauses
Baga (erjan,5)
Baga (axmet,4)
Baga (marjan,5)
Мұндағы. Predicates (предикаттар), Clauses (сөйлемдер-ұйғарымдар) Турбо прологтың кілттік сөздері. Predicates бөлімінде әр предикат атауы аргументтерінің типтері көрсетіліп сипатталады.
Clauses бөлімінде фактілер мен ережелер енгізіледі. Программаны компиляциялау, сақтау және іске қосу тәсілдері 3.7 – тақырыпта көрсетілген. 4- мысалды орындау алдында берілгендер қорын экранға шығарып, іске қосу командасын беру керек. Одан әрі Турбо прологта көрінген сұхбаттық терезенің Мақсат (Цель) жазуының қатарына берілетін команда:
Цель: баға (Х,5)
4) Турбо Прологта типті алдымен бөлімінің алдында (ти, облыс, домен) бөлімінде сипаттауда мүмкін.Мысалы, жоғары программаның басын мынадай түрде жазуға болады:
Domains
S= string
N=integer
Predicates (S,N clauses)
5) Турбо Прологта пайдаланылатын негізгі стандартты облыс (тип) түрлері: integer, real, char, string, symbol.
Integer [-32768;33767] аралығынан алынатын бүтін сандар;
Real [e-307;e+308] аралығынан алынатын нақты сандар;
Char – символдар. Олар екі дәйекшенің арасында жазылады.
String – екі тырнақшаның арасына жазылып көрсетілетін жолдық шамалар, оларды тырнақшаларға алмай жазуға болады.
symbol String – типті сияқты символдар тізбегі. Оларды тырнақшаларға алмай жазуға болады, ал тізбек аралығында бос орындар болса не ол кіші әріптен бастап жазылса, тырнақшаларға алып жазу керек, мысалы:
Бір кісі “abc”, “marjan” /*string*/
Abc, marjan, бір кісі axmet /*symbol*/
6) Турбо Прологта Мақсат (Цель) бөлімінің программа ішіне енгізуге де болады. Бұл жағдайда ол программаның бөлімінің соңына не бөліміне енгізіледі.
9-10 тақырып. Прологта логикалық программалау. Мәліметтер базасы.
Мақсаты: Прологтағы мәліметтер базасын және сұраныстарды мысалдармен қарастыру.
1-мысал. Қарапайым орысша – қазақша сөздігін дайындау керек. Фактілер aud (<орысша сөз>, <қазақша аудармасы>) түрінде берілсін: Турбо Прологта берілгендер қорын мынадай түрде дайындауға болады.
Predicates
Aud (string, string)
Clouses
Aud(голова, бас)
Aud(нос, мұрын)
Aud(рот, ауыз)
Aud(тело, дене)
Aud(человек, адам)
Aud
…………………
Цель: Aud (голова,X)
X=бас
2-мысал. Адамдардың қарапайым телефон анықтамалығын құрып, сұрақ бойынша жауап шығару керек.
Оның мақсаты predicates бөліміне енгізген түрде құрылуы:
Predicates
Tel(string, string)
Goal
Write (“фамилия”-?),
Readln(Fam),
Tel(fam, telef_Nom)
Write (“телефон нөмірі “ telef_Nom”), n1.
Clauses
Tel(“Үмбетов. О”, “52-21-60”)
Tel(“Сүлтанов.М”, “55-32-14”)
Tel(“Ержан.К”, “52-21-36”).
Программа іске қосылған кезде бірден фамилия сұралады:
Fam-? Үмбетов.О
Телефон нөмірі=52-21-60
Программаға енгізілген n1-келесі жазуды жаңа жолдан бастау (курсорды жаңа жолдың басына орналастыру) стандартты операторы, Write-стандартты предикат (оператор).
Прологта пайдаланылатын айнымалылар әдеттегі программалау тілдеріндегі айнымалылардай емес. Олар үшін жадтан арнайы орын бөлінбейді. Олардың мәндері - берілгендер қорында сақталған нысандар атаулары.
Коньюнкциялы сұрақтың жазылуы да коньюнкциялы фактінің жазылуы сияқты: әр мақсат үтір арқылы бөлініп жазылады. Мысалы, сәйкес білім қоры дайындалып, Нұрғали да, Баян да ұнататын нысан сұралса, оны жазылуы:
?- unatedy (nurgali,X), unatedy (baian,X).
Мұнда Пролог берілгендер қорынан алдымен сұраққа енгізілген бірінші мақсатқа сәйкес фактіні іздейді. Егер берілгендер қорында бірінші болып «ұнатады (Нұрғали,ыстық)» фактісі кездессе, жүйе Х айнымалысына «ыстық» мәнін меншіктеп (Х=ыстық), оның мәнін басқа мақсаттарда кездесетін осындай айнымалылардың орнына қойып шығады. Одан әрі берілгендер қорынан «ұнатады (баян, ыстық)» мақсатын іздейді. Ол табылса, оған белгі қойып, екі мақсатты да қанағаттандыратын жауапты басып шығарады. Әйтпесе, Пролог іздеуді берілгендер қорыны басынан бастап қайта жүргізеді. Мұндай процесті қайту процесі не қайту механизмі деп атайды.
Сұрақта белгісіз аргументтер саны бірнеше болуы да мүмкін.
3-мысал. 7-мысал. «Жәмиляның анасы мен оның анасы кімдер-?» сұрағы берілсін, берілетін сұрақ пен шығатын жауаптың түрі:
?-ana(X,Y), ana(Y,jamilia).
X=xadisha Y=baian
Мұнда берілген сұрақ берілгендер қорымен үйлесімді болуы үшін қор мынадай түрде құрылған болуы тиіс.
ana (xadisha baian)
ana (gulnar,nurlan)
ana (baian jamilia)
………………….. т.с.с
Турбо Прологта программаны сақтап, іске қосу командасын берген кезде экранның оң жағында көрінген Dialog терезесінде берілетін команда:
Мақсат: ana(X,Y), ana(Y,jamilia)
Мұнда да, Пролог жауапты алдымен бірінші мақсатқа сәйкес іздейді, т.с.с.
Сонымен, сұрақ берілсе, Пролог оның мазмұнын берілгендер қорында сақталуы фактілермен салыстырады да, мазмұнының дұрыстығын дәлелдеуге болатынын не болмайтынын анықтайды және сәйкес жауап шығарады. Яғни, Прологта сұраққа жауап беру мақсатты ұйғарымдарды дәлелдеумен бірдей. Дәлелдеу- мақсаттың берілгендер қорымен үйлесімділігін анықтау деген ұғым. Егер сұраққа енгізілген мақсаттар бірнеше болса, Пролог алдымен бірінші мақсатты дәлелдеуге кіріседі, ол дәлелденсе, оның оң жағына енгізілген мақсаттың үйлесімділігін тексеруге кіріседі, т.с.с. Үйлесімділік болмаса, қайту процесі орындалады.
Прологта бірден бірнеше фактінің бар не жоғын тексеру сұрағы құрылымды сұрақ делінеді. Мысалы, мынадай берілгендер және т.с.с берілгендер қоры дайындалған болсын:
ushady(ushakh).
ushady(tyrna).
Khanaty_bar(tyrna).
Khanaty_bar(karlygash).
................................. .
Қорға сәйкес мынадай құрылымды сұрақ беруге болады:
?- ushady(Х), кhanaty_bar(Х).
Х= tyrna
Берілгендер қорына енгізілген қанаты бар құс екеу, екіншісі қарлығаш. Бірақ, жүйе х=karlygash жауабын шығармайды, себебі «ushady» предикаты бар мұндай факт берілгендер қорына енгізілмеген.
11-12 тақырып. Прологта логикалық программалау. Білімдер базасы.
Мақсаты: Прологтағы ереже және үйлесімділік ұғымдарын қарастыру. Мысалдар қарастыру.
Пролог сөйлемдері(ұйғарымдары) үш типті: фактілер, ережелер және сұрақтар. Факт – сөзсіз ақиқат болатын жеке мақсат. Мысалы, ұнатады(Ахмет, абай_жолы) фактісінде Ахметтің бір ғана «Абай жолы» кітабын ұнататыны мәлімделген. Егер Ахметтің ұнататын кітаптары көп болса, онда оның бәрін атап шықпай-ақ, қысқаша Unatadi(axmet, kitap) фактісі түрінде жазуға болады. Мұндай факт ереже деп аталады. Яғни, ереже мен фактінің айырмашылығы сөз мәнінде ғана.
Жалы, Прологта ережелер деп көбінесе бір фактінің басқа фактілер тобына байланыстылығы көрсетіліп, жасанды интелектіде пайдаланатын егер ... онда командаса арқылы жазылған сөйлемдерді айтады. Мысалы, табиғи тілде жазылған ережелер:
Егер жаңбыр жауып тұрса, онда дала дымқыл.
Егер жәндік үлкен және қанаттары бар болса, онда ол –құс.
Сонымен, ереже –нысандар және олардың арасындағы қатыстар жөнінде біршама ұйғарым(сөйлем). Ол Прологта басы мен денеден тұратын етіп жазылады:
<басы>:-<дене>.
Дене –ереженің егер бөлімі (мақсат пен мақсаттар). Ол кейбір жағдайларда ақиқат болатын конъюнкциядан не жеке мақсаттан тұруы мүмкін. Конъюнкцияға енген жеке мақсаттар үтір (,) арқылы бөлініп жазылады.
Басы-ереженің онда бөлімі (-негізгі мақсат (негізгі мақсат ереже тақырыбы деп те аталады)).
:- - ереженің басы мен денесінің арасына қойылатын қос нүкте мен сызықшадан тұратын белгі. Ол ережеге енгізілетін егер қызметші сөзін алмастырады (Турбо Прологта:- белгісінің орнына if кілттік сөзін жазуға да болады).
.(нүкте)- ереже соңына қойылатын белгі.
Жалпы, факт- ақиқат болатын жеке мақсат (фактіні мақсаты жоқ ақиқат ереже деп қарастыруға болады), ал ереже- мақсат пен тақырыбын логикалық түрде байланыстыратын сөйлем. Ереженің толық ақиқаттық пікір болмауы да мүмкін.
мысал: құс (Х) :- үлкен_жәндік(Х), /* нысанды тану */
қанаты_бар(Х).
Ит(Х) :- әке (Х,У), ит (У)
Соңғы ереженің оқылуы: егер У-тің әкесі Х, ал У ит болса, онда Х-ит (Х,У- байланыстырылған айнымалылар). Түсінікті болу үшін ережені ағаш түрінде бейнелеп көрсетуге де болады:
Мысалға енгізілген ережелерге және дайындалған фактлерге сәйкес Турбо Прологта программаның құрылуы:
domains
S=string
predicates
kus(S) ulken_jandik(S)
kanaty_bar(S)
it(S) ake(S,S)
clauset
kus(X) :- ulken_jandik(X), kanaty_bar(X).
It1(X):-ake(X,Y), it(Y).
Ulken_jandik(tyrna).
Kanaty_bar(tyrna).
It(bars).
Ake(moinak,bars).
…………………….
Ережелер мен фактілер сақталған соң сәйкес сұрақтар арқылы қажетті жауаптарды шығару қиын емес. Сұрақ белгісі теріліп алынған соң, ал Турбо Прологта іске қосу командасын берген соң сұхбат терезесінде көрінген. Цель: сөзінен кейін ереженің басы жазылуы тиіс. Мысалы:
Цель: it1(X)
X=moynak
Цель: кus(X)
X=turna
Ереже басы бірнеше сөз тіркесіне тұрса, араларына астын сызу (_) белгісін қойып кеткен жөн, оның ешқандай түсінігі жоқ, тек сөздерді біріктіріп жазуға ыңғайлы, мысалы: ата_ана. Асты сызу белгісін жасырын (анонимдік) айнымалы деп те атайды.
Егер ереже денесіне нақты мәндер енгізілсе, аргументтері айнымалылар болатын сұраққа жауап ретінде айнымалылардың нақты мәндері шығады: Мысал: ? – unaidy(axmet,X) &-kyz(X), unaidy(X,kitap).
Сұрағы берілген кезде Пролог сұрақ денесінің сол жағында бірінші болып жазылған kyz(Х) мақсатын берілген қорымен салыстырады да, қыз(Х) [kyz(X)] мақсатына үйлесімді факт табылса, оның аргументі Х-ке меншіктеп, Х айнымалысы кездесетін барлық жерге осы мәнді қойып шығады, т.с.с. Айнымалыны сәйкес мәнімен алмастыру айнымалыны нақтылау делінеді.
Ескертетін жайт: сұрақ беру кезінде ереже денесіне енгізілген мақсаттардың жазылу реті өте маңызды. Себебі, Пролог оларды тек солдан оңға реті бойынша қабылдап алып, іздеу жүргізеді. Жазылу реті бұзылса, шығатын жауаптың бөлек болып шығуы мүмкін.
Жүйеге фактілерге қосып ережелер де енгізілсе, оларды білім қоры деп, ал, біршама фактілер мен ережелер тобын процедура деп те атайды. Нақты фактілер мен ережелер жиыны- сұраққа жауап дайындалатын қарапайым программада. Яғни, Прологта берілгендер қоры, білім қоры және программалар бір түрлес. Оларды тек Пролог нысандарына екі түрлі көзқарас деп түсінуге болады. Бірақ, программалардың көпшілігі, мысалы, сараптаушы жүйелерді дайындау программаларының үлкен және олар мақсаттарды дәлелдеуді қажет ететін логикалық ұйғарымдар түрінде құрылады. Фактілер жиынтығы логикалық программалаудың қарапайым түрі. Күрделі программаға жаңа сөйлемдер және өңдеуді қажет ететін процедураларды қосып программаны кеңейту де мүмкін.
Прологта фактілерге енгізілетін айнымалылар жалпылық квантормен айқын емес түрде байланысты, мысалы, ұнатады (Х,алма) фактісі кез-клген Х-тің алманы ұнататынын білдіреді. Барлық айнымалылар жалпылық кванторлы болғандықтан программаларда оның белгісі енгізілмей тастап кетеді.
Сонымен, программа Пролог- жүйе ішіне сақталып қойылады. Сұрақ берілген кезде Пролог талқылаудың кері тізбегін пайдаланып, әр мақсатты дәлелдеуге тырысады. Егер бір мақсат дәлелденбесе (үйлесімді болмаса), Пролог өзі белгіленген айнымалы мәндерін өшіріп, дәлелдеуді қор басынан бастап қайта жүргізеді. Яғни, іздеу тереңдетіліп және қайту механизмі қолданылып жүргізіледі.
2-мысал. Табиғи тілде мынадай ереже берілсін: егер Х атаулы ер кісінің әкесі А және У атаулы әйелдің әкесі де А болса, онда Х-пен У – бір туыс.
Ерлер мен әйелдердің әкелері жөнінде екі тізім дайындалған болсын:
1-тізім(ерлер)
|
2-тізім (әйелдер)
|
әке 1 (Оспан,Марат)
әке 1 (Нұрлан, Болат)
әке 1 (Ержан, Қажым)
әке 1 (Мұрат, Сұлтан)
|
әке 2 (Мұстафа, Айгүл)
әке 2 (Мұрат, Шолпан)
әке 2 (Нұрлан, Маржан)
әке 2 (Бахыт, Жәния)
|
Тізімдерді қарап шығып, әкелері бір ерлер мен әйелдерді анықтау керек.
Жоғарғы тізімдерде олар:
Болат пен Маржан (әкелері-Нұрлан),
Сұлтан мен Шолпан (әкелері - Мұрат )
Есепті шешу үшін алдымен екі тізімді бір білім қоры түрінде дайындап, арнайы атаумен сақтау керек (мысалы, Туыстар). Ол – дайындалған программада:
Tuis (X, Y, A): -ake1 (A,X), ake2 (A,Y).
Ake1 (ospan, marat).
Ake1 (nurlan, bolat).
……………………
Ake2 (baxit,jania).
Берілетін сұрақ ?-tuis (X,Y,A).
Білім қорында әкелері бір туыстардың бар екені ақиқат түрінде алынып, ережеге енгізілген әр мақсаттың ақиқаттығы дәлелденеді. Бұл талқылаудың кері тізбегі.
Сұрақ беріліп программа іске қосылған кезде Пролог алдымен ереже денесінің сол жағында бірінші болып жазылған аke1(А,Х) мақсатын дәлелдеуге кіріседі. Дәлелдеу берілгендер қорының басынан бастап жүргізілетіндіктен, мақсаттың бірінші фактіге сәйкес келетінін анықтап, жүйе мынадай меншіктеу командаларын орындайды:
A=ospan, X=marat
Одан әрі, жүйе ережеге енгізілген барлық А және Х айнымалыларының орнына осы мәндерді қойып шығарды да, келесі әке2 (Оспан,У) мақсатын дәлелдеуге кіріседі. Бірақ берілгендер қорында «Оспан» аргументі бірінші болып жазылған басқа факт жоқ. Сондықтан, Пролог берілгендер қорының басына қайтып өтеді де, баламалы дәлелдеуге қайта кіріседі. Мұнда Пролог алдымен бірінші фактіге сәйкес А, Х айнымалыларына меншіктелген мәндерді өшіріп тастайды да, келесі фактіні тексеруге көшеді. Келесі факті әке1 (А,Х) мақсатына салыстырмалы болғандықтан, жаңа меншіктеу командасын орындайды: А= Нұрлан, Х=Болат. Одан әрі әке2 (нұрлан, У) мақсатына салыстырмалы фактіні іздеу барысында Пролог сәйкес фактіні табады да, У=Маржан меншіктеуін орындап, сәйкес мәндерді басып шығарады: X=bolat Y=marjan A=nurlan
Сұраққа сәйкес келесі мәндерді шығару үшін клавиатура арқылы «;» пернесін басу керек (Турбо Прологта олар автоматты түрде көрінеді, пернені басу қажет емес).
Сонымен, егер сұраққа енгізілген ұйғарымның бір ғана мақсаты дәлелденбесе де, берілгендер қорында сұраққа үйлесімді ұйғарым жоқ (сұрақ үйлесімсіз) деп есептелінеді. Яғни, сұрақ үшін барлық мақсаттардың дәлелденуі міндетті. Ал, Прологта сұраққа енгізілген айнымалылардың бәріне «барлығы үшін» (жалпылау) кванторы әсер етеді.
Жоғарыдағы мысалға сәйкес білім қорының (программаның) Турбо Прологта жазылуы:
Predicates
Tuis (string, string, string)
Ake1(string, string)
Ake2(string, string)
Clauses
Tuis(X,Y,A): - ake1(A,X), ake2(A,Y).
Ake1(ospan,marat)
Ake1(nurlan,bolat).
………….
Ake2(baxit,jania)
Прологта программаның орындалу жолын (М мақсатын іздеуді) іздеу ағашы түрінде бейнелеп көрсетуге болады. Мұнда М ағаштың негізгі түбірі ретінде алынады да, ереже денесіне енгізілген мақсаттар ағаштың келесі түбірлері ретінде алынады. Әр түбірдің өзінен шығатын қырлары болуы мүмкін, олар берілген программаға сәйкес М мақсатын дәлелдеуге пайдаланылады. Кейбір түбірлер мақсатқа үйлесімсіз болуы мүмкін, бұл кезде қайту механизмі орындалады.
Мысалы, жоғарыда берілген программаның орындау сұрағын қарастырайық: tuis(X,Y,A): - ake1(A,X), ake2(A,Y) оны орындау жолын ағаш түрінде бейнелеуге болады:
Прологтан әр қатардан тұратын жазбаларды (тізімді) да ашуға болады:
3-мысал. Студенттердің математика мен информатикадан алған бағалары көрсетілген мынадай тізімнің әрқайсысын жолдық типке алып, Турбо Пролог терезесінен алу керек:
1.ахметов О. 4 4
2.Ермеков Н. 4 3
3.Нұрланова Н. 5 5
Программаны мынадай түрде құруға болады:
Domains
T=string
Predicates
tizim(T)
clauses
tizim(“1.Ахметов О. 4 4”)
tizim(“2.Ермеков Н. 4 3”)
tizim(“3.Нұрланова М. 5 5 ”)
Компиляциялап, іске қосу командасын берген соң сұхбаттық терезеде берілетін команда – цель : tizim(T).
Достарыңызбен бөлісу: |