- •Пролог тіліне жалпы шолу
- •Бағдарлама мысалы: туыстық қатынастар
- •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.7. Пролог – бағдарламаның декларативті мағынасы (мәні)
Сөйлемді қарастырайық:
P: - Q , R 7
Декларативті интерпретация:
Р – шындық, егер Q, R шындық
Q мен R- ден P шығады
Процедуралық интерпретация:
Р есебін шешу үшін, Q ішкі есебін шеш, ал кейін R ішкі есебін шешуге көш.
Р – ға жету үшін, алдымен Q – ге жет, содан кейін R – ге жет.
Мақсаттар арасындағы үтір мақсаттар конъюнкциясын білдіреді: олардың барлығы шындық болуы тиіс. Бірақ – та Прологта мақсаттар дизъюнкциясы да болуы мүмкін: кем дегенде мақсаттардың біреуі шындық болуы тиіс.
Дизъюнкция нүктелі үтірмен белгіленеді. Мыс:
Р: – Q; R немесе :
P: - Q.
P: - R.
< = > 2).
Үтір мақсаттарды нүктелі үтірге қарағанда күштірек байланыстырады. Осылайша, сөйлем:
P: - Q, R; S,?, V.
Былайша түсіндіріледі: 1) P: - (Q, R); (S, T, V). немесе
2) P: - Q, R.
P: - S, T, V.
2.8. Пролог – бағдарламаның құрылымы
Бағдарлама құрылысы келесі түрге ие:
/ * бірнеше жолдарда коментарии */
% бір жолда комментарии
CONCTANCTS
% Бұл бөлімде константалар сипатталады.
DOMAINS
% Бұл бөлімде айнымалылар сипатталады.
PREDICATES
% Бұл бөлімде предикаттар анықталады.
CLAUSES
% Бұл бөлімде фактілер мен ережелер анықталады.
DATABASES
% Бұл бөлімде мәліметтердің динамикалық базасының предикаттары анықталады.
GOAL
% Бұл бөлімде сұрақтар, сұраныстар (ішкі) анықталады.
Домендер қарапайым, құрылымды және стандарт емес болып бөлінеді. Стандартты мәндерге жататындар: symbol, chat, integer, real, string, file.
Symbol – мәліметтердің символды типі, жазбаның екі формасын иеленеді: 1. Бөлек жолдан басталатын әріптер, цифрлар, сызу белгілерінің тізбегі. 2. Қос тырнақшаларға алынған символдар қатары.
Chat – бір символ.
integer – - 32768 … 32768 диапазонындағы бүтін сандар.
real – кәдімгі және экспоненциалдық жазба формасында келетін нақты сан.
string – символдар жолы, екі рет жақшаға алынған кез-келген символдар қатары.
file – файлдық айнымалы, оның мәні MS DOS – та файлдарға ат беру ережесі бойынша анықталады. Домендерді сипаттау (жариялау) мысалдары:
DOMAINS
a = integer
b = symbol
Домендердің стандартты типінен басқа, қарапайым және күрделі объектерден тұратын домендер құрылымын қолдануға болады. Бір жарнамада (жариялауда) араларын үтір арқылы бөліп немесе қызметші сөз or арқылы бөліп бірнеше құрылымдарды сипаттауға болады:
DOMAINS
D1, d2, d3 = symbol
f = fruits (d1, d2, d3); p(d3).
Предикаттар бөлімінде ереженің сол бөлігі немесе CLAUSES бөлімінен алынған ереже аты жазылады.
CLAUSES бөлімінде тұжырымдар жазылады. Бір ғана дұрыс предикаты бар фактілер мен ережелер бір блок аумағында жазылады, яғни бірінен соң бірі жазылуы тиіс. Ереже денесінде баспаға шығарылған предикаттардан басқа стандартты предикаттар мен салыстыру операциялары қолданылуы мүмкін. Стандарт предикаттар әртүрлі функцияларды орындайды. Олар: енгізу және шығару, файлдармен жұмыс жүргізу, DOS операциялық жүйесімен жұмыс істеу, жолдарды өңдеу, графикалық режимді қолдап тұру, бағдарламалаудың басқа да жүйелерімен интерфейсті қамтамасыз ету.
GOAL бөлімі ішкі деп аталатын бағдарламаға сұраныс қоюдан тұрады. Ішкі сұраныс үшін Пролог бірінші лайықты шешімді іздеуге кіріседі, сонымен қатар жүйе, салыстыру кезінде алынған, табылған шешім нәтижелері туралы хабарламайды. Бұл іс - әрекеттер бағдарламалануы тиіс. GOAL сұраныс бөлімі бағдарламада кездеспеуі де мүмкін, онда диалог режимінде бағдарлама қосылған соң сыртқы сұранысты қолдану үшін жүйе шешімінің барлық варианттарын тауып алады, және дәл осы терезеде (окно) айнымалы предикаттар мәндері шығарылады және дұрыс немесе дұрыс емес орындалғаны туралы хабарлайды.
1. Мысал. Пролог тілінде вертикальдық кесінді қатынасының бағдарламасын жазу.
DOMAINS
X=integer
PREDICATES
point(X,X)
otr(X,X,X,X)
vert_otr(X,X,X,X)
CLAUSES
point(1,4).
point(1,7).
point(5,7).
point(5,4).
otr(X,Y,X1,Y1):-point(X,Y), point(X1,Y1).
vert_otr(X,Y,X1,Y1):-otr(X,Y,X1,Y1), X=X1, Y<>Y1.
GOAL
clearwindow, vert_otr(X,Y,X1,Y1), write(X,Y," ",X1,Y1).
2. Мысал. Егер координаттары берілген болса, тең кесінділер қатынасын анықтау.
DOMAINS
X=integer
PREDICATES
dl(X,X,X,X,X)
ravn(X,X,X,X,X,X,X,X)
CLAUSES
dl(X1,Y1,X2,Y2,Z):- Z=sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)).
ravn(X1,Y1,X2,Y2,X3,Y3,X4,Y4):-dl(X1,Y1,X2,Y2,Z1),
dl(X3,Y3,X4,Y4,Z2), Z1=Z2, write("Кесінділер тең");
write("Кесінділер тең емес").
GOAL
clearwindow, ravn(1,1,1,3,2,1,2,3)
3. Мысал. Егер координаттары берілген болса, кесінді ортасы қатынасын анықтау.
DOMAINS
X=integer
PREDICATES
ravn(X,X,X,X)
CLAUSES
ravn(X1,Y1,X2,Y2):- X=(X2-X1)/2, Y=(Y2-Y1)/2,
write("Кесінді ортасы: X=",X," Y=",Y); write("Кесінді ортасы жоқ").
GOAL
clearwindow,
ravn(1,5,3,4)
4. Мысал. Үшбұрыш шыңдары берілген болса, медиана координаттарын анықтау.
DOMAINS
X=integer
PREDICATES
med(X,X,X,X,X,X)
CLAUSES
med(X1,Y1,X2,Y2,XV,YV):- X=(X2-X1)/2, Y=(Y2-Y1)/2,
write("Медиана координаттары: X1=", X," Y1=",Y," X2=",XV," Y2=",YV).
GOAL
clearwindow, med(1,2,3,4,3,5).
Тапсырмалар
Келесі салыстыру операциялары дұрыс болады ма, не дұрыс емес болады ма?
а) нүкте (А, В) = нүкте (1, 2).
б) нүкте (А, В) = нүкте (X, Y, Z).
с) қосу (2, 2) = 4.
е) үшбұрыш (нүкте (-1, 0), Р2, Р3) = үшбұрыш (Р1, нүкте (1, 0), нүкте (0, Y)).
Тұжырымдарды тексеру үшін, бағдарлама жазыңыз. Осы бөлімде қолданған кесінділер көрінісін қолдана, тең қабырғалы үшбұрыш үшін терм жазыңыз.
Осы бөлімде қолданған кесінділер көрінісін қолданып, вертикальды тура Х = 5, горизонталды тура Х = 10 - да кез – келген кесіндіге, сәйкес келетін, терм жазыңыз.
Былай деп ұйғарайық, тікбұрыш (Р1, Р2, Р3, Р4) терм тікбұрышымен көрсетілген, мұнда: Р – тура (оңды) жөнделген тікбұрыш шыңдары. Егер R – тікбұрыш вертикальды және горизонталды жақтарымен болатын болса ғана, орын алатын, регулярлы (R) қатынасын анықтаңыз.
Терм квадрат жазыңыз.
Терм төртбұрыш жазыңыз.
Терм тік бұрышты үшбұрыш жазыңыз.
Келесі бағдарламаны қарастырайық.
f (1, бір).
f (S (1), екі).
f (S(S(1)), үш).
f (S(S(S(X))),N) : - f (X, N).
Пролог – жүйе келесі сұрақтарға қалай жауап береді:
a) f (S (1), A).
b) f (S(S(1)), екі).
c) f (S(S(S(S(S(S(S(1))))))), C).
f (D, үш).
Келесі бағдарламада айтылады, екі адам бір – бірінен туысқан, егер:
а) біреуі екіншісінің ата – тегі болып табылады, немесе
б) екеуіне де ортақ ата – тегі бар, немесе
с) екеуіне де ортақ ұрпағы бар.
туыстар(Х, Y): - ата-тегі(Х, Y).
туыстар(Х,Y): - ата-тегі(Y, Х).
туыстар(Х,Y): - ата-тегі(Z, X), ата-тегі(Z, Y).
туыстар(Х,Y): - ата-тегі(X, Z), ата-тегі(Y, Z).
Нүктемен үтірді қолданбай – ақ, сіз мына бағдарламаны қысқарта аласыз ба?
Келесі бағдарламаны нүкте мен үтірді қолданбай, көшіріп жазыңыз.
Қайта құру (Сан, Сөз): -
Сан = 1, Сөз = бір;
Сан = 2, Сөз = екі;
Сан = 3, Сөз = үш.
Бағдарлама берілген:
Үлкен (аю).
Үлкен (піл).
Кішкентай (мышық).
Қоңыр (аю).
Қара (мышық).
Сұр (піл).
Күңгірт (Z): - қара (Z).
Күңгірт (Z): - қоңыр (Z).
Сұраққа қатысты жауап қалай ізделеді:
? – күңгірт (Х), үлкен (Х). % кім бір мезгілде күңгіртте және үлкен?
? – үлкен (Х), күңгірт (Х). % кім бір мезгілде үлкен және күңгірт?
Осы екі сұрақтың қайсысына қатысты жүйе көбірек жұмыс атқарады? Экранға барлық үлкен, орташа, кішкентай жануарларды, құстарды шығару. Жануарлар мен құстар үлкендігі қатынасын анықтау қажет.
Ромб қатынасын жазу.
Жартышеңбер қатынасын жазу.
Параллелограмм үшін терм жазу.
Параллельді түзулер қатынасын жазыңыз.
Қиылысатын түзулер қатынасын жазыңыз.
Мына қатынастарды анықтаңыз: логикалық операция және, логикалық операция НЕМЕСЕ.
Мына қатынастарды анықтаңыз: логикалық операция НЕ, логикалық операция НЕМЕСЕ – ҚОСПАҒАНДА (Исключающее - Или) (Егер сандар сәйкес келмесе, операция нәтижесі 1 – ге тең).
Мына қатынастарды анықтаңыз: логикалық операция ЭКВИВАЛЕНТТІЛІК (егер сандар бірдей шықса, операция нәтижесі 1 – ге тең), логикалық операция ИМПЛИКАЦИЯ (егер А = 1, В = 0 болса, операция нәтижесі 1 – ге тең).
0 – ден 9 – ға дейінгі сандарды анықтау үшін қатынастарын анықтаңыз, бірақ клавиатурадан енгізілген әрбір сан экранға жазбаша түрінде түссін.
Жылды (жазбаша) анықтау үшін қатынасын анықтаңыз.
Ай қатынасын анықтаңыз, бірақ клавиатурадан енгізілген әрбір ай нөмірі ай атымен жазылсын.
Оң сандар, теріс сандар қатынастарын анықтаңыз.
Реттік, ретсіз сандар қатынастарын анықтаңыз.
Сандар, 3 және 9 еселі қатынастарын анықтаңыз.
Адам жасын туған жылы бойынша, сонымен қатар жыл аты бойынша анықтау (мыс.: жылан жылы).
Туылған датасы бойынша жұлдызнама тобын анықтау.
