ПРОЛОГ - БАҒДАРЛАМАНЫҢ СИНТАКСИСІ ЖӘНЕ СЕМАНТИКАСЫ





МАЗМҰНЫ

КІРІСПЕ ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .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
1. ТІЗІМДЕР. СТАНДАРТТЫ ПРЕДИКАТТАР ... ... ... ... ... ... ... ... ... ... ..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-тараудан, Қортыныды және қолданылған әдебиеттер тізімінен тұрады.

1. ПРОЛОГ ТІЛІНЕ ЖАЛПЫ ШОЛУ

1. Бағдарлама мысалы: туыстық қатынастар

Бірінші суреттегі туыстық қатынастардың толық ағашы келесі Пролог - бағдарламасында сипатталған:

ата-анасы( пам, боб).
ата-анасы( том, боб).
ата-анасы( том, лиз).
ата-анасы( боб, энн).
ата-анасы( боб, пат).
ата-анасы( пат, джим).
Бұл бағдарлама 6 сөйлемнен құралған, әрбір сөйлем бір ғана ата-ана қатынасы болу фактісін жариялайды (көрсетеді).
Аргумент ретінде бірінші орында ата-анасы, ал екіншісінде - баласы. Бағдарламаны енгізген соң сұрақтар қоюға болады:
? - ата-анасы( боб, пат).
жүйе жауабы: Иә (Yes).
? - ата-анасы( лиз, пат).
жүйе жауабы: Жоқ (No).
? - ата-анасы(X, лиз) * Лиздің ата-анасы кім ? *
X = том
? - ата-анасы(боб, X ) * Бобтың баласы кім ? *
X = энн * Басқа да шешімдерін көру үшін мыналарды енгізіңіз ; *
X = пам
? - ата-анасы(X, Y) * қайсысы кімнің ата-анасы ? *
X = пам, Y = боб
X = том, Y = боб
X = том, Y = лиз
Бұдан да едәуір күрделі сұрақтарды қоюға да болады: Джимнің ата-анасының ата-анасы кім ? . Бағдарламада ата- анасының ата-анасы қатынасы анықтамасы айтылмаған, осындай сұрақ 2 этапқа бөлінеді:
1. Джимнің ата-анасы кім ? Y - делік.
2. Y - тің ата-анасы кім ? X - делік.
1. және (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).

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=T154,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. Прологта ата-ана қатынасы туралы келесі сұрақтарды қарастырыңыз:
а) Паттың ата-анасы кім?
б) Лиздің баласы бар ма?
в) Паттың ата-анасының ата-анасы кім?
г) Туысқан әпкесі, туысқан ағасы қатынасын анықтаңыз.
1. Пролог ережесіндегі келесі тұжырымдарды трансляциялаңыз:
а) Ағасы және әпкесі бар қайсыбіреу - ағасы және әпкесінің болу (қатынасы).
б) Баласы бар қайсыбір X, оның әпкесі бар, екі баласының болуы (екі балалы болу қатынасы).
1. Ата-ана қатынасын қолдана, немере баласын, немере қызын, шөбере баласын, шөбере қызын қатынасын анықтаңыз (ата-анасының ата-анасы қатынасына ұқсас).
2. Ата-анасы және әпкесі қатынастарын қолдана, тәтесі, көкесі қатынасын анықтаңыз.
3. Ата-тегі қатынасының басқа вариантын қарастырайық:
ата-тегі(X, Z): - ата-анасы(X, Z).
ата-тегі(X, Z): - ата-анасы(Y, Z), ата-тегі(X, Y).
Мына анықтама дұрыс па: Сіз 5 - суреттегі диаграмманы жаңа анықтамаға сәйкес етіп өзгерте аласыз ба? Жақын туысқандары: қатынасын анықтаңыз.
1. Алыс ағасы, әпкесі қатынасын анықтаңыз.
2. Өгей әкесі, өгей шешесі қатынасын анықтаңыз.
3. Немересі бар жиен қатынасын анықьтаңыз.
4. Ағалы (жақын немесе туысқан) болу қатынасын анықтаңыз.
5. Университет құрылысын құру. Оқутушы-студент қатынасын анықтаңыз.
6. Университет құрылысын құру. Кафедра меңгерушісі қатынасын анықтаңыз.
7. Университет құрылысын құру. Декан қатынасын анықта.
8. Университет құрылысын құру. Ректор қатынасын анықта.
9. Сессия құрылысын құру. Жақсы оқушы студент (екі - ақ төрті бар) қатынасын анықта.
10. Сессия құрылысын құру. Үші жоқ студенттер қатынасын анықта.
11. Сессия құрылысын құру. Бір ғана үші бар студент қатынасын анықта .
12. Кәсіпорын құрылысын құру. Директор қатынасын анықта.
13. Кәсіпорын құрылысын құру. Қызыметкерлер бөлімінің басшысы қатынасын анықта.
14. Кітапхана құрылысын құру. Оқырман қатынасын анықта.
15. Кітапхана құрылысын құру. Кітап қарыз студент қатынасын анықта.
16. Кітапхана құрылысын құру. Кітапханашы қатынасын анықта.
17. Банк құрылысын құру. Несие қатынасын анықта.
18. Банк құрылысын құру. Депозит қатынасын анықта.
19. Банк құрылысын құру. Валюталық операциялар қатынасын анықта.

2. ПРОЛОГ - БАҒДАРЛАМАНЫҢ СИНТАКСИСІ ЖӘНЕ СЕМАНТИКАСЫ

2.1. Айнымалылар

Прологта айнымалылар бас әріптен басталады, латын алфавитінің цифрлері мен әріптері қолданылады. Айнымалының ерекше түрі - анонимді айнымалы, айнымалының нақты мәні жоқ кезде предикаттың аргументі ретінде қолданылады. Прологта айнымалы информация қоймасы емес, ол сөйлем қаншалықты болса, соншалықты өмір сүреді. Бағдарламаның орындалуы процесінде айнымалы жаңа мәнге ие бола алады. Айнымалы мысалдары:
X
Нәтиже
Объект 2
Қатысушылар тізімі
Жаңа заттар тізімі.
_X 23
_X 23
баласы бар(X): - ата-анасы(X, Y).
Бұл жерде баласы бар болу (қасиеті) сипаты баланың атына байланысты емес, сондықтан анонимді айнымалы қолданған жөн:
баласы бар(X): - ата-анасы( _ , _ ).
Атының лексикалық диапазоны - бір.
Сөйлем. Бұл деген сөз, егер, мысалы, X аты екі әртүрлі сөйлемдерден кездессе, онда ол екі әртүрлі айнымалыларды білдіреді. Бірақ бір сөйлемнің ішінде оның әрбір кездесуі бір ғана айнымалыны білдіреді. Константалар үшін жағдай басқаша: бір ғана атом кез - келген сөйлемде бір ғана объектіні білдіреді, басқаша - айтқанда - бүкіл бағдарламада.

2.2. Құрылымдар

Құрылым - бұл конструкция, ол оның аргументтері тізімінің жақшалары ішіне жазылған және үтірлермен бөлінген құрылымы атынан құралады. Құрылымға компоненттерін біріктіру үшін функтурды таңдап алу қажет.
Мысалы:
Дата (1, мамыр, 1983)
Бұл жерде фуктур -* дата. Бұл мысалдағы барлық компоненттер - константалар (екі компонент - бүтін сандар және біреуі - атом). Мамыр айындағы жеке бір күнді 1-суреттегі құрылыммен көрсетуге болады:

Осындай объекттер, 2-суретте көрсеткендей, келесі пролог терминдерімен көрсетуге болады:

Р1=нүкте(2, 4).
Р2=нүкте(5, 2).
S = кесінді (P1, P2) = кесінді (нүкте (2, 4), нүкте (5, 2)).
Т = үшбұрыш (нүкте (2, 4), нүкте (5, 2), нүкте (7, 6)).

2.3. Салыстырулар

Пролог тілінде орындалатын негізгі операция - бұл салыстыру операциясы (унификация немесе келісу деп те айтылады). Бұл операция не жемісті, не жеміссіз болуы мүмкін. Айнымалылар өз мәндерін, фактілер және ережелерде константаларды салыстыру нәтижесінде, алады. Айнымалы өз мәніне ие болғанша, ол бос деп аталады. Айнымалы өз жаңа мәнін алған соң, ол байланып қалады. Бірақ ол сұраққа жауап алу үшін қажетті уақыт аралығында ғана байланып (байланысты) тұрады. Бұдан кейін Пролог оны босатады, қайтарады және альтернативті шешімдер іздейді. Айнымалылар салыстыру процесі бөлігінің қызметін атқарады. Салыстыру операциясы былайша анықталады:
1. Константа тек константамен ғана салыстырылады.
2. Ұқсас құрылымдар бір - бірімен салыстырылады.
3. Айнымалы константамен немесе басында белгілі айнымалымен салыстырылады.
4. Екі бос айнымалылар бір - бірімен байланыса алады және бір - бірімен салыстырылады.
Салыстыру мысалдары:
5 саны 5-пен ғана салыстырылады.
иелену фактісі иелену-мен ғана салыстырылады .
Сергей константасы Юрий константасымен салыстырылмайды.

2.4. Сұрақтар

Сұрақ - бұл бағдарламаның орындалуы кезінде болатын логикалық шығыстың жіберуші нүктесі. Кез - келген сұраққа жүйе Иә немесе Жоқ деп жауап береді.
Горизонталь және вертикаль кесінділерді тану үшін бағдарлама фрагментін жазайық. Кесінді вертикаль, егер оның нүктелері - соңы координаттары сәйкес келсе; кесіндіге басқа да ешқандай шектеулер қойылмайды. Горизонталдық сипаты ұқсас келеді, тек X пен Y - тің орындарына ауыстыру қажет. Құрамында осы фактілері болған келесі бағдарлама, мына тұжырымдарды жүзеге асырады:

Осы бағдарламамен мынадай диалог мүмкін:
? - верт (кес. (нүкте (4, 2), нүкте (4, 6))).
Иә.
? - верт ( кес. (нүкте (1, 1), нүкте (2, Y))).
Жоқ.
? - гор (кес. (нүкте (1, 1), нүкте (7, Y))).
Y = 1.

Бағдарламаға қатысты едәуір жалпы сұрақты құрастырайық: Басы (2, 3) нүктесінде жатқан, қандай да бір вертикалды кесінділер бар ма ?

? - верт (кес. (нүкте (4, 2), Р))
Р = нүкте (4, Y)

Келесі сұрақты қояйық: Бір мезгілде горизонталь да, вертикаль да болатын кесінді бар ма?
? - верт (S), гор (S).
S = кес (нүкте (X, Y), нүкте (X, Y)).

2.5. Фактілер мен ережелер

Факті - бұл аргументтері, константалар болатын предикаттар, объекттер арасында немесе объекттер сипаты қатынастарын білдіреді. Фактілер әрдайым шындық және бағдарлама орындалуы кезінде болатын, дәлелдеме қызметін атқарады. Фактілер мысалдары:
Иванов (сымтетік, Т. 123456).
Петров (сымтетік, Т. 789012).

Ережелер бар фактілер негізінде объектер арасындағы жаңа қатынастарды анықтауға мүмкіндік береді. Аргументтер ретінде константалар, айнымалылар қолданылуы мүмкін.
Ереже құрылысы:
ереже басы: - ішкі мақсат 1, ішкі мақсат 2, ... ішкі мақсат N.
Мұндағы : - - егер деп оқылады ; , - және дегенді білдіреді. Фактілер мен ережелер соңында нүкте қойылады. Ереже мысалы:
Беделді _ жігіт (X) : - жақсы көреді (Х, рэп), киеді (Х, блейзер).
Былайша түсіндіріледі: Қайсыбір Х - беделді жігіт, егер Х рэпті жақсы көрсе және блейзер кисе.

2.6. Бағдарламаның орындалуы алгоритмі

Прологта бағдарлама фактілері мен ережелері қандай да бір мәнді облыста объекттер арасындағы байланыстар мен қатынастар сипаттары болып табылады. Факті орындалуы үшін басқа ешнәрсе қажет емес, толық анықталған процедура ретінде қарастыруға болады. Ереже:

А1_В1 , В2 , ... . Вn .

Бұл ережені А процедурасының анықтамасы ретінде қарастыруға болады. Ол тұжырымдайды, оны анықтау үшін В1, В2, ... ., Вn. білу қажет. В1, В2, ..., Вn процедуралары белгілі тәртіпте солдан оңға қарай орындалады. Егер кезекті процедура дұрыс орындалса, онда келесі процедураға көшеді, егер дұрыс емес орындалса, онда жоғарыдан - төмен анықталатын, осы процедура жазбасының келесі вариантына көшеді. Білім базасында фактілер мен ережелер бірігуі үшін іздеу жоғарыдан - төмен қарай кезекті жүргізіледі және егер де сәйкес фактілер табылмаса, онда жауабы теріс болады. Мысалы:
Жақсы көреді (Оля, оқуды).
Жақсы көреді (Света, бадминтон).
Жақсы көреді (Лена, жүзуді).
Жақсы көреді (Лена, оқуды).
? - жақсы көреді (Х, оқуды), жақсы көреді (Х, жүзуді) .
Х = Лена.

Сұрақ оқу мен жүзуді жақсы көретін адамдар бар, жоқ екенін білдіреді. Пролог басында (бірінші) сұрақтың бірінші бөлігі салыстыратын фактіні іздейді - жақсы көреді (Х, оқуды). Х айнымалысы Оля мәнімен байланысады, сонымен қатар Пролог фактілер тізімінде іздеу процедурасы жағдайын көрсететін көрсеткішті белгілеп (есте сақтап) алады. Бұдан кейін Пролог Х=Оля кезінде сұрақтың екінші бөлігін біріктіруге тырысады. Жақсы көреді (Оля, жүзуді) фактісін іздейді. Мұндай факті жоқ және іздеу жеміссіз аяқталады. Осындай жағдайда Пролог іздеудің бірінші бөлігіне оралады - жақсы көреді (Х, оқуды), Х айнымалыны босатады және басында фактілер тізімінде табылған көрсеткіштен бастап іздеуді қайта жүргізеді. Жақсы көреді (Лена, оқуды) фактісі сәйкес келеді. Х айнымалысы Лена мәнімен салыстырылады және бұдан кейін сұрақтың екінші бөлігі жақсы көреді (Лена, жүзуді) фактісімен сәйкес келеді. Сұраққа жауап табылды.

2.7. Пролог - бағдарламаның декларативті мағынасы (мәні)

Сөйлемді қарастырайық:
P: - Q , R 7
Декларативті интерпретация:
1. Р - шындық, егер Q, R шындық
2. Q мен R- ден P шығады
Процедуралық интерпретация:
1. Р есебін шешу үшін, Q ішкі есебін шеш, ал кейін R ішкі есебін шешуге көш.
2. Р - ға жету үшін, алдымен Q - ге жет, содан кейін R - ге жет.
Мақсаттар арасындағы үтір мақсаттар конъюнкциясын білдіреді: олардың барлығы шындық болуы тиіс. Бірақ - та Прологта мақсаттар дизъюнкциясы да болуы мүмкін: кем дегенде мақсаттардың біреуі шындық болуы тиіс.
Дизъюнкция нүктелі үтірмен белгіленеді. Мыс:
1. Р: - Q; R немесе :
2. P: - Q.
P: - R.
1. = 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, YY1.
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(X 1,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. Келесі салыстыру операциялары дұрыс болады ма, не дұрыс емес болады ма?
а) нүкте (А, В) = нүкте (1, 2).
б) нүкте (А, В) = нүкте (X, Y, Z).
с) қосу (2, 2) = 4.
е) үшбұрыш (нүкте (-1, 0), Р2, Р3) = үшбұрыш (Р1, нүкте (1, 0), нүкте (0, Y)).
Тұжырымдарды тексеру үшін, бағдарлама жазыңыз. Осы бөлімде қолданған кесінділер көрінісін қолдана, тең қабырғалы үшбұрыш үшін терм жазыңыз.
1. Осы бөлімде қолданған кесінділер көрінісін қолданып, вертикальды тура Х = 5, горизонталды тура Х = 10 - да кез - келген кесіндіге, сәйкес келетін, терм жазыңыз.
2. Былай деп ұйғарайық, тікбұрыш (Р1, Р2, Р3, Р4) терм тікбұрышымен көрсетілген, мұнда: Р - тура (оңды) жөнделген тікбұрыш шыңдары. Егер R - тікбұрыш вертикальды және горизонталды жақтарымен болатын болса ғана, орын алатын, регулярлы (R) қатынасын анықтаңыз.
3. Терм квадрат жазыңыз.
4. Терм төртбұрыш жазыңыз.
5. Терм тік бұрышты үшбұрыш жазыңыз.
6. Келесі бағдарламаны қарастырайық.
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).
a. f (D, үш).
1. Келесі бағдарламада айтылады, екі адам бір - бірінен туысқан, егер:
а) біреуі екіншісінің ата - тегі болып табылады, немесе
б) екеуіне де ортақ ата - тегі бар, немесе
с) екеуіне де ортақ ұрпағы бар.
туыстар(Х, Y): - ата-тегі(Х, Y).
туыстар(Х,Y): - ата-тегі(Y, Х).
туыстар(Х,Y): - ата-тегі(Z, X), ата-тегі(Z, Y).
туыстар(Х,Y): - ата-тегі(X, Z), ата-тегі(Y, Z).
Нүктемен үтірді қолданбай - ақ, сіз мына бағдарламаны қысқарта аласыз ба?
Келесі бағдарламаны нүкте мен үтірді қолданбай, көшіріп жазыңыз.
Қайта құру (Сан, Сөз): -
Сан = 1, Сөз = бір;
Сан = 2, Сөз = екі;
Сан = 3, Сөз = үш.
1. Бағдарлама берілген:
Үлкен (аю).
Үлкен (піл).
Кішкентай (мышық).
Қоңыр (аю).
Қара (мышық).
Сұр (піл).
Күңгірт (Z): - қара (Z).
Күңгірт (Z): - қоңыр (Z).
Сұраққа қатысты жауап қалай ізделеді:
? - күңгірт (Х), үлкен (Х). % кім бір мезгілде күңгіртте және үлкен?
? - үлкен (Х), күңгірт (Х). % кім бір мезгілде үлкен және күңгірт?
Осы екі сұрақтың қайсысына қатысты жүйе көбірек жұмыс атқарады? Экранға барлық үлкен, орташа, кішкентай жануарларды, құстарды шығару. Жануарлар мен құстар үлкендігі қатынасын анықтау қажет.
1. Ромб қатынасын жазу.
2. Жартышеңбер қатынасын жазу.
3. Параллелограмм үшін терм жазу.
4. Параллельді түзулер қатынасын жазыңыз.
5. Қиылысатын түзулер қатынасын жазыңыз.
6. Мына қатынастарды анықтаңыз: логикалық операция және, логикалық операция НЕМЕСЕ.
7. Мына қатынастарды анықтаңыз: логикалық операция НЕ, логикалық операция НЕМЕСЕ - ҚОСПАҒАНДА (Исключающее - Или) (Егер сандар сәйкес келмесе, операция нәтижесі 1 - ге тең).
8. Мына қатынастарды анықтаңыз: логикалық операция ЭКВИВАЛЕНТТІЛІК (егер сандар бірдей шықса, операция нәтижесі 1 - ге тең), логикалық операция ИМПЛИКАЦИЯ (егер А = 1, В = 0 болса, операция нәтижесі 1 - ге тең).
9. 0 - ден 9 - ға дейінгі сандарды анықтау үшін қатынастарын анықтаңыз, бірақ клавиатурадан енгізілген әрбір сан экранға жазбаша түрінде түссін.
10. Жылды (жазбаша) анықтау үшін қатынасын анықтаңыз.
11. Ай қатынасын анықтаңыз, бірақ клавиатурадан енгізілген әрбір ай нөмірі ай атымен жазылсын.
12. Оң сандар, теріс сандар қатынастарын анықтаңыз.
13. Реттік, ретсіз сандар қатынастарын анықтаңыз.
14. Сандар, 3 және 9 еселі қатынастарын анықтаңыз.
15. Адам жасын туған жылы бойынша, сонымен қатар жыл аты бойынша анықтау (мыс.: жылан жылы).
16. Туылған датасы бойынша жұлдызнама тобын анықтау.

1. РЕКУРСИВТІ ЕСЕПТЕУЛЕР. АРИФМЕТИКАЛЫҚ ӨРНЕКТЕР

3.1. Есептеулерді басқару

Есептеулерді басқару процесінің негізгі құралдарына стандартты предикаттар fail және !. Fail - дұрыс емес, сәтсіздік, !-өшіріп тастау, Сәтсіздікке душар бағдарламаның мысалы:
1. Мысал. Екінші курс студенттері туралы мәліметтерді экранға шығару.
... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Пролог тіліне жалпы шолу
Бағдарламалау тілдері
ЭЕМ-ң қызметі, құрамы және жіктелуі. Алгоритмдік тілдер туралы мәліметтер
Жасанды интеллект жүйесіндегі аспаптық құрылғылар
Бағдарламалау(программалау) технологиясы
Алгоритмдерді Паскаль программалау тілінде әзірлеу
СИ бағдарламалау тілі және жобалануы туралы
ЖАСАНДЫ ИНТЕЛЛЕКТ НЕГІЗДЕРІ
Визуалды тілдерде графиканы программалау. Нұсқаулық
Құжаттарды бір-бірімен ұқсастығы
Пәндер