- •Пролог тіліне жалпы шолу
- •Бағдарлама мысалы: туыстық қатынастар
- •1.2. Ережелер көмегімен мысал – бағдарламаны кеңейту
- •1.3. Ереженің рекурсивті анықтамасы
- •2. Пролог – бағдарламаның синтаксисі және семантикасы
- •2.1. Айнымалылар
- •2.2. Құрылымдар
- •2.3. Салыстырулар
- •2.5. Фактілер мен ережелер
- •2.6. Бағдарламаның орындалуы алгоритмі
- •2.7. Пролог – бағдарламаның декларативті мағынасы (мәні)
- •2.8. Пролог – бағдарламаның құрылымы
- •Рекурсивті есептеулер. Арифметикалық өрнектер
- •3.1. Есептеулерді басқару
- •Рекурсивті есептеулер
- •Арифметикалық өрнектер
- •Тізімдер. Стандартты предикаттар
- •4.1. Тізімдер
- •4.2. Тізімдермен операциялар жүргізу
- •1. Операция: тізімге қатыстылығы (мүшелігі).
- •Операция: жалғастыру (конкатенация).
- •4.3. Стандартты предикаттар
- •Тапсырма 2
- •Қорытынды
- •Әдебиеттер
- •3. Язык Пролог в задачах и примрах
- •3.1. Программирование с помощью фактов и правил
- •3.1.2. Первая формулировка задачи поиска в пространстве состояний 51 ад
- •3.1.3. Реализация на Прологе простой вопросно-ответной системы
- •3.2. Рекурсии
- •Упражнения
- •3.3. Программирование циклических процессов
- •3.4. Работа со списками
- •3.4.1. Описание списков в программе
- •3.4.11. Примеры использования списков
- •Упражнения
- •3.5. Виды рекурсии
- •3.6. Поиск в пространстве состояний
- •Упражнения
- •3.6.0 Использование структур
- •Упражнения
- •3.7. Динамическая база данных
- •3.7.1. Использование стандартных предикатов динамической базы данных
- •Упражнения
- •3.8. Средства управления
- •3.9. Представление множеств двоичными деревьями
- •3.9. Программы классификации
- •3.9.1. Программа классификации с обратной цепочкой рассуждений
- •3.9.2. Программы классификации с прямой цепочкой рассуждений.
- •3.9. Обработка текстов
- •Упражнения
- •3.10. Примеры
КІРІСПЕ...................................................................................................................2
1. ПРОЛОГ ТІЛІНЕ ЖАЛПЫ ШОЛУ................................................................5
1.1. Бағдарлама мысалы: туыстық қатынастар .............................................5
1.2. Ережелер көмегімен мысал – бағдарламаны кеңейту..........................6
1.3. Ереженің рекурсивті анықтамасы.............................................................8
2. ПРОЛОГ – БАҒДАРЛАМАНЫҢ СИНТАКСИСІ ЖӘНЕ СЕМАНТИКАСЫ...............................................................................................14
2.1. Айнымалылар..............................................................................................14
2.2. Құрылыстар………………………………………………………………..14
2.3. Салыстырулар..............................................................................................15
2.4. Сұрақтар........................................................................................................16
2.5. Фактілер мен ережелер..............................................................................17
2.6. Бағдарламаның орындалуы алгоритмі..................................................18
2.7. Пролог – бағдарламаның декларативті мағынасы (мәні)..................19
2.8. Пролог – бағдарламаның құрылымы.....................................................19
3. РЕКУРСИВТІ ЕСЕПТЕУЛЕР. АРИФМЕТИКАЛЫҚ ӨРНЕКТЕР...........................................................................................................26
3.1. Есептеулерді басқару..................................................................................26
3.2. Рекурсивті есептеулер................................................................................27
3.3. Арифметикалық өрнектер........................................................................30
ТІЗІМДЕР. СТАНДАРТТЫ ПРЕДИКАТТАР..........................................34
4.1. Тізімдер..........................................................................................................34
4.2. Тізбектермен операцияларжүргізу………..…………………………..39
4.3. Стандартты предикаттар………………………………..………………41
ҚОРТЫНДЫ........................................................................................................53
ӘДЕБИЕТТЕР......................................................................................................54
КІРІСПЕ
Бағдарламалауда процедуралық әдістен басқа, оның өкілдері Бейсик, Паскаль, Си сияқты жоғары дәрежелі әмбебап тілдермен қатар, тағы екі бағыт - функционалдық (қызметтік) және логикалық бағдарламалау жатады.
Функционалдық бағдарламалау қарапайым идеяға негізделген, бүкіл информацияны өңдеу және соңында алынған нәтиже кейбір қызметтерді орындайтын салымды немесе рекурсивті функцияларды шақыру түрінде көрсетілуі мүмкін, сондықтан бір функцияның мәні екіншісінің аргументі ретінде қолданылады. Функционалдық бағдарламалау тілінің өкіліне Лисп (Lisp proces – sing – тізімдерді өңдеу) тілі жатады.
Логикалық бағдарламалау жүйелер, тілдер, тәсілдер, анықтамалар шеңберінен құралған. Оның негізінде қайсыбір логикалық тілде тапсырманы тұжырымдар жиынтығымен шешу идеясы жатыр, және қайсыбір формальды дедуктивті жүйеде логикалық қорытындыны құру жолымен тапсырманың (есептің) шешімін шығару жатыр. Осы түрдегі ең әйгілі жүйелерге Пролог (Program ming in logic – логика жүйесінде бағдарламалау) тілін жүзеге асыру жатады. Пролог тілі Си, Паскаль, Фортран, Бейсик сияқты, алгоритмдерді жазу үшін арналған дәстүрлі бағдарламалау тілдерімен салыстырғанда, мына ерекшеліктерге ие:
Прологтағы бағдарлама алгоритм емес, формальдық логика тілінде есеп шарттарын жазу болып табылады;
Пролог тілі есептеу немесе графикалық есептерді шешу үшін емес, логикалық есептерді, адамның логикалық ақылын қорыту процессін моделдеу үшін арналған; есептеулер мен графикалық құрылымдар Прологта логикалық қорытындының қосалқы өнімі ретінде орындалады;
Пролог бағдарламашыдан ерекше ойлау қабілетін талап етеді, ал бұл процедуралық бағдарламаларға үйренгендердің оны оқуын қиындатады, сондықтан да маман бағдарламашылар бұл тілге өтуге құмарланбайды, бұл Пролог тілінің дамуына кері әсерін тигізеді; бірақ көптеген елдерде (Жапония, Англия, Франция, Германия, Израиль және т.б.) бағдарламалауды оқытуда бірінші оқытылатын тіл ретінде білім беруде Прологты практикалық қолдану көбейуде, Паскаль типіндегі процедуралық тілдерге көшу бұл жағдайда қиындықтарды туғызбайды.
Осының барлығы Прологты жоғары дәрежелі тілдерге (тілге) жатқызады. XX – ғасырдың 90 жылдарында 5-ші дәрежелі компьютерлерді (жасанды интелектке ие) құрудың жапондық жобасында Пролог аппаратты ұжымдастыру және бағдарламаны жасау негізі ретінде қолданылған. Қазіргі Пролог, әрине, 5-ші дәрежелі ЭЕМ-дерді бағдарламалау тілінің, соңғы вариантына жатпайды және болашақта мәңгі дамуын алады. Ол дискриптивті бағдарламалауда Бейсик ролін алатын шығар; оның мәні мен даму мүмкіндігі, логикалық бағдарламалау идеясының таралуы өте жоғары.
Дипломдық жұмыстағы мысалдарда Турбо – Пролог 2.0, версиясында бағдарламалау негізі көрсетілген. Пролог базасы үлгілерді салыстыру, мәліметтерді иерархиялық құрылыста көрсету және автоматты түрде қайтарудан құрылған механизмдердің шектелген тізбегінен тұрады, осы шағын тізбек ғажайып қуатты және икемді бағдарламалық аппаратты құрайды. Пролог тілінің жетістіктері мынаған негізделген, бір жағынан, ондағы логикалық формулаларды қолдану арқылы көптеген практикалық есептерді жазып шығуға болады, ал екінші жағынан қарапайым интерпретациялары формулалардың табылған және логикалық бағдарламалау жүйесін жеткілікті дәрежеде тиімді жүзеге асыру енгізілген, Пролог әсіресе, ішінде объекттері және олардың арасында қатынастары болатын есептерді шешуге жақсы бейімделген. Тіл құрылысында мәліметтер базасымен қарапайым және тиімді жұмыс істеу мүмкіндіктері қарастырылған, бұл оның негізінде әртүрлі типтегі ақпараттық–анықтама және экспертті жүйелерді құруға мүмкіндік береді.
Жұмыс 4 тараудан құрылған. Әр тарау толық теориялық материал, жұмыс істеуші бағдарламалар мысалдарымен толықтырылған. Бірінші тарауда жанұя қатынастары – бағдарламасының мысалы қарастырылады, Пролог тілінің негізгі барлық түсініктері жазылған.
Екінші тарауда Пролог тілінің элементтері қарастырылған: айнымалылар, құрылымдар, сұрақтар, салыстырулар, фактілер, ережелер. Сұрақтардың қалай қойылатыны көрсетілген, белгілі фактілер негізінде ережелер қарастырылған. Сұраныстарды бағдарлама ұсыныстарымен салыстыру арқылы бағдарламаның орындалу алгоритмі көрсетілген. Бағдарлама мысалында: вертикалды кесінділер қатынастары қарастырылған және бағдарлама құрылысының барлық бөлімдері сипатталған.
Үшінші тарауда рекурсивті функциялар сұрақтары, қорытынды есептеулер және арифметикалық белгілер қарастырылған. Рекурсивті есептеулер факториалдық есебі мысалында көрсетелген.
Төртінші тарауда тізімдер, тізімдермен негізгі және қосымша операциялар, стандартты предикаттар, тізім элементерін баспаға шығару бағдарламасының мысалы, және басқа да бағдарлама мысалдары келтірілген.
Қарастырылған бағдарлама мысалдары, теориялық материалдар мен функционалдық және логикалық бағдарламалау, мәліметтер базасы және эксперттік жүйелер пәндері бойынша лабораториялық және курстық жұмыстарды орындауда пайдалы болатынына кәміл сенімде.
Жұмыстың мақсаты: Информатика мамандығы студенттері үшін Пролог тілін оқыту әдістемесі технологияларын қолдану
Жұмыстың құрылымы: Кіріспеден, 4-тараудан, Қортыныды және қолданылған әдебиеттер тізімінен тұрады.
Пролог тіліне жалпы шолу
Бағдарлама мысалы: туыстық қатынастар
|
|
|
|
Бірінші суреттегі туыстық қатынастардың толық ағашы келесі Пролог – бағдарламасында сипатталған:
ата-анасы( пам, боб).
ата-анасы( том, боб).
ата-анасы( том, лиз).
ата-анасы( боб, энн).
ата-анасы( боб, пат).
ата-анасы( пат, джим).
Бұл бағдарлама 6 сөйлемнен құралған, әрбір сөйлем бір ғана ата-ана қатынасы болу фактісін жариялайды (көрсетеді).
Аргумент ретінде бірінші орында ата-анасы, ал екіншісінде – баласы. Бағдарламаны енгізген соң сұрақтар қоюға болады:
? – ата-анасы( боб, пат).
жүйе жауабы: Иә (Yes).
? – ата-анасы( лиз, пат).
жүйе жауабы: Жоқ (No).
? – ата-анасы(X, лиз) / * Лиздің ата-анасы кім ? */
X = том
? - ата-анасы(боб, X )/ * Бобтың баласы кім ? * /
X = энн / * Басқа да шешімдерін көру үшін мыналарды енгізіңіз << ; >> * /
X = пам
? – ата-анасы(X, Y) / * қайсысы кімнің ата-анасы ? * /
X = пам, Y = боб
X = том, Y = боб
X = том, Y = лиз
Бұдан да едәуір күрделі сұрақтарды қоюға да болады: << Джимнің ата-анасының ата-анасы кім ? >>. Бағдарламада ата- анасының ата-анасы қатынасы анықтамасы айтылмаған, осындай сұрақ 2 этапқа бөлінеді:
Джимнің ата-анасы кім ? Y – делік.
Y – тің ата-анасы кім ? X – делік.
және (2) Пролог тілінде былайша жазылады:
? – ата-анасы(Y, джим), ата-анасы( Y, X).
X = боб, Y = пам.
Осы сұрақтарды басқаша да қоюға болады:
«Келесі талаптарды қанағаттандыратын X пен Y – ті табу керек»:
ата-анасы(Y, джим) және ата-анасы(X, Y). Егер олардың орындарын ауыстырсақ, жауабы тура солай шығады:
? – ата-анасы( том, X), ата-анасы(X, Y) % томның немерелері кім ( қайсыбір X – тің баласы, ол томның баласы болып табылады ) ?
|
|
|
|
? – ата-анасы(X, энн), ата-анасы(X, пат) /* энн мен Патта ортақ ата-ана бар ма ? * /
X = боб
1.2. Ережелер көмегімен мысал – бағдарламаны кеңейту
Біздің мысал – бағдарламаны көптеген тәсілдермен кеңейтуге болады, ата-анасы қатынасына қатысушы адамдар жынысы туралы ақпаратты қосайық:
әйел (пам).
еркек (том).
еркек (боб).
әйел (лиз).
әйел (пат).
әйел (энн).
еркек (джим).
Бұл ақпаратты басқаша да көрсетуге болады, әйел мен еркек қатынастарының орнына, бір ғана бинарлық қатынасжынысын қолдануға болады. Онда:
жынысы (пам, әйелдік (ұрғашы)).
жынысы (том, еркектік).
жынысы (боб, еркектік).
және т.б.
Енді жаңа қатынас ұрпағы (әулеті), ол ата-ана қатынасына кері келеді, мысалы:
ұрпағы(лиз, том).
Бұл қатынас ата-ана қатынасына кері келуін ескерсек, прологтық сөйлем жазуға болады:
ұрпағы(Х, Х): - ата-анасы(Х, У) /* барлық Х және У үшін, егер Х – У ата-анасы болса, онда У – Х ұрпағы */.
Осындай сөйлем ереже деп аталады, мұндағы (У, Х) ұрпағы – сөйлемнің басы немесе қорытындысы, (Х, У) ата-анасы – шартты бөлігі немесе сөйлем денесі. Мысалы:
? – ұрпағы(лиз, том).
Бағдарламада ұрпақтар туралы факті жоқ, сондықтан мына ережені қолданамыз:
ұрпағы(лиз, том): - ата-анасы(том, лиз).
Пролог - жүйесі шартты бөлігі (шындыққа жатады ма) орындалады ма, жоқ па, соны тексереді. Ол үшін бастапқы мақсат:
ұрпағы(лиз, том) % ішкі мақсатпен ауыстырылады:
ата-анасы(том, лиз).
Осындай фактіні бағдарламада табу мүмкін болғандықтан, яғни ереже шығысындағы тұжырым шындық, онда жүйе yes ( иә) деп жауап береді. Шеше қатынасын қосайық:
шеше(X, Y): - ата-анасы(X, Y), әйел(X). / * Барлық X және Y үшін: X Y – тің шешесі, егер X Y – тің ата-анасы және X - әйел болса. */
Үтір – екі шарт арасындағы конъюнкция, яғни олар бір мезгілде орындалуы тиіс. Ата-анасының ата-анасы қатынасын ереже көмегімен былайша жазады:
ата-анасының ата-анасы(X, Z): - ата-анасы(X, Y), ата-анасы(Y, Z). / * әпкесі қатынасы үшін ұқсас: * /.
әпке(X,
Y): - ата-анасы(Z, X), ата-анасы(Z, Y), әйел(X).
Әпке қатынасы үшін жетілдірілген ереже:
әртүрлі(X, Y): - X <> Y.
әпке(X, Y): - ата-анасы(Z, X), ата-анасы(Z, Y), әйел(X), әртүрлі(X, Y).
