- •Пролог тіліне жалпы шолу
- •Бағдарлама мысалы: туыстық қатынастар
- •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. Примеры
1.3. Ереженің рекурсивті анықтамасы
Ата-тегі қатынасын анықтайық :
|
|
|
|
4- сурет ата-тегі қатынасының мысалы.
а) X – жақын ата-тегі;
б) X – Z – тің алыс (арғы) ата-тегі. Бағдарлама:
а) ата-тегі(X, Z): - ата-анасы(X, Z).
б) ата-тегі(X, Z): - ата-анасы(X, Y), ата-анасы(Y, Z).
ата-тегі(X, Z): - ата-анасы(X, Y1), ата-анасы(Х1, Y2), ата-анасы(Y2, Z).
ата-тегі(X, Z): - ата-анасы(X, Y1), ата-анасы(Y1, Y2), ата-анасы(Y2, Y3), ата-анасы(Y3, Z).
Бұл бағдарлама үлкен және белгілі аумақта жұмыс істейді . Бірақ бұл проблема өзі арқылы ата-тегі қатынасымен шешіледі :
|
|
|
|
5- сурет. Қатынастың рекурсивті тұжырымдамасы.
Екі ережеден тұратын ата-тегі қатынасының толық бағдарламасы: бірінші жақын ата-тегі үшін және екінші, алыс ата-тегі үшін:
ата-тегі(X, Z): - ата-анасы(X, Z).
ата-тегі(X, Z): - ата-анасы(X, Y), ата-тегі(Y, Z).
? – ата-тегі(пам, X). /* Памның ұрпағы кім */.
X = боб;
X = энн;
X = пат;
X = джим .
Туыстық қатынастар туралы бағдарламаның қорытынды түрі :
ата-анасы(пам, боб).
ата-анасы(том, боб).
ата-анасы(том, лиз).
ата-анасы(боб, энн).
ата-анасы(боб, пат).
ата-анасы(пат, джим).
әйел(пам).
еркек(том).
еркек(боб).
әйел(лиз).
әйел(энн).
әйел(пат).
еркек(джим).
ата-тегі(Y, X):- ата-анасы(X, Y).
шешесі(X, Y): - ата-анасы(X, Y), әйел(X).
ата-анасының ата-анасы(X, Z): - ата-анасы(X, Y), ата-анасы(Y, Z).
әртүрлі(X, Y): - X <> Y .
әпкесі(X, Y): - ата-анасы(Z, X), ата-анасы(Z, Y), әйел(X), әртүрлі(X, Y).
ата-тегі(X, Z): - ата-анасы(Z, X).
ата-тегі(X, Z): - ата-анасы(X, Y), ата-тегі (Y, Z).
1. Мысал. << Сессия >> құрылысын құру, барлық озат оқушыларды (студенттерді) таңдап алу.
DOMAINS
X=symbol
Y=integer
PREDICATES
muj(X)
jen(X)
fiz(X,Y)
xim(X,Y)
mat(X,Y)
otl(X)
otl_muj(X)
otl_jen(X)
CLAUSES
muj(misha).
muj(casha).
muj(dima).
jen(ira).
jen(masha).
jen(lena).
fiz(lena,5).
fiz(ira,5).
fiz(masha,4).
xim(lena,5).
xim(ira,5).
xim(masha,4).
mat(lena,5).
mat(ira,5).
mat(masha,5).
otl(X):-fiz(X,5),xim(X,5),mat(X,5).
otl_muj(X):-muj(X),otl(X).
otl_jen(X):-jen(X),otl(X).
GOAL
clearwindow,otl_jen(X),write(“отличница: “,X),nl,fail.
2. Мысал. Доллар – теңге және теңге – доллар қатынасын анықтау.
DOMAINS
X=real
PREDICATES
dolar_tenge(X,X)
tenge_dolar(X,X)
CLAUSES
dolar_tenge(D,T):-T=D*154,write(T).
tenge_dolar(T,D):-D=T/154,write(D).
GOAL
clearwindow, tenge_dolar(300,D), nl, dolar_tenge(2,T)
3. Мысал. Зауыт құрылымын құру. Қарым – қатынастарын анықтау: бригадир – жұмысшылар, цех.
DOMAINS
rb=rab(Fam,Name)
Fam,Name,Br=symbol
PREDICATES
seh(Br,rb)
CLAUSES
seh(br1,rab(ivan,serg)).
seh(br1,rab(sem,serg)).
seh(br1,rab(ivan,dim)).
seh(br2,rab(kim,oleg)).
seh(br2,rab(alma,alia)).
seh(br2,rab(tim,gul)).
seh(br3,rab(myn,aig)).
seh(br3,rab(by,din)).
seh(br4,rab(amir,tol)).
seh(br4,rab(tol,nur)).
seh(br4,rab(ten,ira)).
GOAL
clearwindow,
write("Бригадир№1: "),
seh(br1,Y),nl,write(' ',Y),fail;
nl,write("Бригадир№2: "),
seh(br2,Y),nl,write(' ',Y),fail;
nl,write("цех: "),
seh(X,Y),nl,write(X,' ',Y),fail
Тапсырмалар
1. Ата-ана қатынасы анықталды деп есептей (1- суретте көрсетілгендей), Пролог – жүйесінің келесі сұрақтарға жауаптарының қандай болуын анықтаңыз:
а) ? – ата-анасы(джим, X)
б) ? – ата-анасы(X, джим)
в) ? – ата-анасы(пам, X), ата-анасы(X, пат)
г) ? – ата-анасы(пам, X), ата-анасы(X, Y), ата-анасы(Y, джим).
д) Ата, апа қатынасын анықтаңыз.
2. Прологта ата-ана қатынасы туралы келесі сұрақтарды қарастырыңыз:
а) Паттың ата-анасы кім?
б) Лиздің баласы бар ма?
в) Паттың ата-анасының ата-анасы кім?
г) Туысқан әпкесі, туысқан ағасы қатынасын анықтаңыз.
Пролог ережесіндегі келесі тұжырымдарды трансляциялаңыз:
а) Ағасы және әпкесі бар қайсыбіреу – ағасы және әпкесінің болу (қатынасы).
б) Баласы бар қайсыбір X, оның әпкесі бар, екі баласының болуы (екі балалы болу қатынасы).
Ата-ана қатынасын қолдана, немере баласын, немере қызын, шөбере баласын, шөбере қызын қатынасын анықтаңыз (ата-анасының ата-анасы қатынасына ұқсас).
Ата-анасы және әпкесі қатынастарын қолдана, тәтесі, көкесі қатынасын анықтаңыз.
Ата-тегі қатынасының басқа вариантын қарастырайық:
ата-тегі(X, Z): - ата-анасы(X, Z).
ата-тегі(X, Z): - ата-анасы(Y, Z), ата-тегі(X, Y).
Мына анықтама дұрыс па: Сіз 5 - суреттегі диаграмманы жаңа анықтамаға сәйкес етіп өзгерте аласыз ба? Жақын туысқандары: қатынасын анықтаңыз.
Алыс ағасы, әпкесі қатынасын анықтаңыз.
Өгей әкесі, өгей шешесі қатынасын анықтаңыз.
Немересі бар жиен қатынасын анықьтаңыз.
Ағалы (жақын немесе туысқан) болу қатынасын анықтаңыз.
«Университет» құрылысын құру. Оқутушы-студент қатынасын анықтаңыз.
«Университет» құрылысын құру. Кафедра меңгерушісі қатынасын анықтаңыз.
«Университет» құрылысын құру. Декан қатынасын анықта.
«Университет» құрылысын құру. Ректор қатынасын анықта.
«Сессия» құрылысын құру. Жақсы оқушы студент (екі – ақ төрті бар) қатынасын анықта.
«Сессия» құрылысын құру. Үші жоқ студенттер қатынасын анықта.
«Сессия» құрылысын құру. Бір ғана үші бар студент қатынасын анықта .
«Кәсіпорын» құрылысын құру. Директор қатынасын анықта.
«Кәсіпорын» құрылысын құру. «Қызыметкерлер бөлімінің басшысы» қатынасын анықта.
«Кітапхана» құрылысын құру. Оқырман қатынасын анықта.
«Кітапхана» құрылысын құру. Кітап қарыз студент қатынасын анықта.
«Кітапхана» құрылысын құру. «Кітапханашы» қатынасын анықта.
«Банк» құрылысын құру. «Несие» қатынасын анықта.
«Банк» құрылысын құру. Депозит қатынасын анықта.
«Банк» құрылысын құру. «Валюталық операциялар» қатынасын анықта.
