Орындауға арналған тапсырмалар варианттары
Жоғары көрсетілген Пролог-түсіндіргішті Пролог тілінің келесі конструкциялары іске асатындай етіп жетілдіріңіз:
Анонимді айнымалылар. Пролог тілінде анонимді айнымалылар _ символы арқылы белгіленеді. Анонимді айнымалылар жекеше, бірақ оларға доступ жоқ.
Fail предикаты (бас тарту) ереженің орындалу кезінде тиімсіздікті тудырады.
Арифметикалық операциялар. Қосу, алу, көбейту, бөлу. Операторлар префиксті формада берілуі мүмкін және терм түрінде көрсетілуі мүмкін.
Салыстыру операциялары: көп, көп немесе тең, кем, кем немес тең, тең, тең емес. Операторлар префиксті формада берілуі мүмкін және терм түрінде көрсетілуі мүмкін.
Cut предикаты (кесу) бэктрекингті басқару үшін қолданылады. Пролог тілінде бұл оператор ! символымен белгіленеді. Оның жұмысы келесідей. Ағымдағы ережедегі cut-тың сол жағынан пайда болатын айнымалылар нақтыланған соң өзгермейтін болып қалады. Басқаша айтқанда, cut-тың сол жағында тұрған мақсаттардың конюнкцияларының барлық альтернативті қорытындыларын қолдануға тиім салынады.
Repeat предикаты қайтару үрдісінде көпшілік шешімдерін тудыруға арналған. Бұл предикат қайтарымды іздеу циклдерінің шексіз қайталануларын орындайды. Предикат әрқашан ақиқат. Оған теру жеткен жағдайдың барлығында есептеудің жаңа тармақтары пайда болады. Предикаттың әрекеті келесі Пролог-анықтамаға толық сәйкес келеді: repeat. repeat:-repeat.
Retract және assert предикаттары сәйкесінше мәліметтер базасына хорновтық клоздарды қосады және жояды.
Call предикаты. Call(Х) мақсаттық тұжырымы мәліметтер базасымен келістірілген болады, егер Х-тің келістірілгенін дәлелдеу тиімді аяқталса.
Not предикаты. Not(Х) мақсаттық тұжырымы мәліметтер базасымен келістірілген болады, егер Х-тің келістірілгенін дәлелдеу тиімсіз аяқталса. Not(Х) мақсаттық тұжырымы мәліметтер базасымен келістірілмеген болады, егер Х-тің келістірілгенін дәлелдеу тиімді аяқталса.
Мақсаттардың дизъюнкциясы. Прологта мақсаттық тұжырымдар дизъюнкцисын анықтау үшін “;” функторы қолданылады. Егер х және у мақсаттық тұжырымдар болса, онда х;у мақсаттық тұжырымы мәліметтер базасымен келістіріледі, егер х немесе у келістірілсе. Жоғарыда ұсынылған Прлогтың Лисп-түсіндіргіші жағдайында Прлог-бағдарламаның ұсынылуына өзгерістер енгізу керек. Құрамына мақсаттар конъюнкциясы енетін қосымша тізімдер енгізуге болады. Бұл жағдайда дизъюнкция конъюнкциялар тізімі болады. Мысалы Прологтық F(A,B);C. ережесін (F (A B) (C)) тізімі түрінде жазуға болады.
Термдерді енгізу шығару операторы. Прологта шығару үшін write предикаты қолданылады. Егер х айнымалысының мәні терм болса, онда write(x) мақсатының пайда болуы бұл термнің дисплейға шығуына алып келеді. Егер х айнымалысы нақтыланбаған болса, _ таңбасымен басталатын кейбір сандық идентификатор шығарылады. Прологта термдерді енгізу үшін read предикаты қолданылады. Егер х айнымалысы нақтыланбаған болса, онда read(x) мақсаттық тұжырымы келесі термнің енгізілуіне алып келеді және осы терм х айнымалысының мәні ретінде тағайындалады. Егер read(x) мақсаттық тұжырымын қарастырып жатқанда оның аргументі нақтыланған болса, онда осы мақсаттық тұжырымның мәліметтер базасымен келістірілгенін дәлелдеу әрекеті келесі термнің оқылуын және оны read-ке енгізілген аргументпен сәйкестіру әрекеті жасалынады. Мақсаттың мәліметтер базасымен келістірілуі осы сәйкестірумен байланысты.
Trace предикаты. Trace предикатының орындалуы толық қадамдау режимін орнатумен бекітіледі. Қадамдау болып жатқан оқиғалардың төрт түрінің терминдерінде сипатталады: CALL (ШАҚЫРУ), EXIT (ШЫҒУ), REDO (ҚАЙТА ҚҰРУ), FAIL (ТИІМСІЗДІК). CALL оқиғасы Прлогтың мақсатты мәліметтер базасымен келістіру әрекетінің басын анықтайды. EXIT оқиғасы кейбір мақсат мәліметтер базасымен келістірілген мезетті анықтайды. REDO оқиғасы жұйе мәліметтер базасымен қайта келістіруге әрекет етіп мақсатқа қайта келген мезетті анықтайды. FAIL оқиғасы мақсатты мәліметтер базасымен келістіру әрекеті тиімсіздікпен аяқталған мезетті анықтайды.
Functor предикаты. Functor предикаты келесідей анықталған: functor(T, F, N),мұнда Т-бұл N аргументті F функторлы терм екенін білдіреді.
Arg предикаты термнің нақты бір аргументіне қол жеткізу үшін қолданылады. Arg(N, T, A), мұнда Т-ның N-ші аргументі А болып табылатынын білдіреді. Arg предикаты әрқашан нақтыланған бірінші және екінші аргументпен қолданылуы тиіс.
Тізімдермен жұмыс істеу мүмкіндігі. Прологта тізімдерді көрсету үшін жақшалық жазу формасы қолданылады. Ол квадраттық жақшаға алынған, бір-бірінен жақша арқылы ажыратылған элементтер тізбегі. Мысалы Прологта келесі тізімдер мүмкін: [] – бос тізім; [a,b,[c,d,e]] – бір-біріне енгізілген тізімдер;[a,V1,b,[X,Y]] – айнымалылары бар тізім. Тізімдермен жұмыс істеу оларды басы және соңына бөлуге негізделген. Прологта басы Х және соңын У көрсету үшін арнайы жазу формасы енгізілген. Бұл келесідей: [X|Y]. Тізімдермен жұмыс істеуді іске асыру барысында жоғарыда келтірілген Пролог-бағдарламаның ұсынылу формасын жетілдіру қажет. Бұл жағдайда арнайы маркерлер (басы, соңы, басы құйрығы маркерлері болуы мүмкін) енгізген жөн.
“=..” предикаты термді шашу және жинау үшін қолданылады. X=...L мақсаттық тұжырымы L әрпі, артынан Х аргументі келетін Х термінің функторынан тұратын тізім болып табылатынын білдіреді. Бұл предикатты ічке асыру үшін тізімдермен жұмыс істеу құралдары іске асырылуы тиіс.
Unify функциясын айнымалының алмастырылушы термге сәйкестігін тексеретін және сәйкес болған жағдайда қате жөнінде хабар беретіндей етіп жетілдіру.
Достарыңызбен бөлісу: |