GOAL
clearwindow, write(“Input X: ”), readint(X), Z(X,Y), write(“Z(”,X,”)=”,Y)
Бақылау сұрақтары
Прологтағы унификация.
Арифметикалық өрнектер.
Әдебиет тізімі
1,2,3..
лекция.
Тақырыбы: Тізімдер, оларға қолданылатын қарапайым операциялар.
Құзыреттіліктер:
ПҚ2.Шет тілі шеңберіндегі құзіреттілік.
ПҚ3.Математикалық және іргелі жаратылыстану ғылыми және техникалық құзіреттілік.
ПҚ4. Компьютерлік құзіреттілік
Лекция жоспары:
1.Тізімдер
2.Қарапайым операциялар.
Лекция мазмұны
Тізімдер, оларға қолданылатын қарапайым операциялар.
КF 12-06-07
Тізбектер – бұл квадрат жақшаларға енгізілген және бір – бірінен бөлінген, объектің реттелген тізімі немесе тізбек элементтерінің жиыны. Тізбек кез – келген элементтер санынан құралады, шектеуге тек компьютер жадысында қалған орын жатады. Элементтері жоқ тізбек бос деп аталады және квадрат жақшаға алынады, бірақ ішінде ешнәрсе жоқ болады.
Тізбектерді өңдеу – тізбектің басы мен аяғына бөлу түсінігіне негізделеді. Басы – бұл тізбектің бірінші элементі, аяғы – қалған бөлігі. Прологта тізбекті қолдану үшін қажет:
Домендер бөлімінде келесі сөздерді жазады:
< домен аты >=< элемент типі >*
Тізбекті жариялау мысалы:
DOMAINS
g1=integer*
g2=symbol*
PREDICATES
f[g1]
l[g2]
Тізбектер мысалы:
[10, 5, 7,12]
[1, 1,5, 0,8, 11,5]
[“қаңтар”, ”ақпан”, ”желтоқсан”]
Тізбектің басы мен аяғына бөлу операциясы:
1. Мысал. Тізбек элементтерін көрсету бағдарламасы:
DOMAINS
List1 = integer*
List2 = symbol*
PREDICATES
name [List1]
score [List2]
CLАUSES
name ["Қалдаров","Сатымбеков","Бұхарбаев"].
score [1,2,3,4].
GOAL
Name [X],
КF 12-06-07
Name [ _, Y, _ ],
Score [Z, _ , F, _ ], write(X,” ”,Y,” ”,Z,” ”,F)
Пролог – бағдарламада элементтерінің кез – келген саны кездесетін тізбектерді қолданған кезде тізбекті басы мен аяғы бөлу тәсілі қолданылады. Бұл тәсіл тізбекті рекурсивті өңдеуді қамтамасыз етеді. Тізбекті бөлу операциясы вертикальды сызықпен белгіленеді және келесі түрде жазылады:
[ Head / Tail ].
2. Мысал. Тізбек құрамын баспаға шығару бағдарламасы:
DOMAINS
List1=integer*
List2=symbol*
PREDICATES
Print _ list (List1)
Print _ list (List2)
CLAUSES
Print _ list ([ ]).
Print _ list ([Head | Tail] ):-write (Head), nl,
Print _ list (Tail).
GOAL
Print _ list ( [1,2,3,4] )
Берілген бағдарламада мәліметтер символдық немесе бүтін тип түрінде көрсетілуі мүмкін. Бағдарламада тізбектерді өңдеудің рекурсивті тәсілі қолданылады. Бағдарламаның бірінші сөйлемі print_ list ( [ ] ) мынаны білдіреді, бос тізбек, екінші сөйлемде қолданылатын, рекурсиядан бағдарламаның шығу шартына жатады. Басында print_ list ([1, 2, 3, 4]) сұранысы print_ list ( [ ] ) бірінші сөйлеммен салыстырылады. Бұл салыстыру сәтсіздікпен аяқталады, яғни [1, 2, 3, 4] [ ]. Бұдан соң сұраныс екінші сөйлеммен салыстырылады. Операция дұрыс аяқталды. Тізбектің сол бөлігінде тізбекті басы мен аяғына бөлу операциясы жүреді, ал оң бөлігінде – тізбектің басжағына экранға шығарады. Бұдан кейін nl предикаты – келесі жолға көшу орындалады. Содан кейін print _ list ([2, 3, 4]) рекурсивті шақыру қалыптастырылады, ал ол print_ list ( [ ] ) процедурасымен байланысады (хабарласады) және т.б.
3. Мысал. X, Y екі тізбекті көбейту соммасын есептеу бағдарламасы.
DOMAINS
Vector=integer*
PREDICATES
prod(Vector,Vector,Vector)
CLAUSES
prod([ ],[ ],0).
prod([X|Xs],[Y|Ys],S):-prod(Xs,Ys,Sp), S=X*Y+Sp.
GOAL
prod([1,2,3],[7,8,9],Res), write(“Res=”,Res)
Пролог – бағдарлама қызметін келесі кесте түрінде көрсетуге болады:
КF 12-06-07
Предикатты шақыру
|
Қойылым
|
Соңғы есептеулер
|
Есептеу нәтижелері
|
Prod([1,2,3],[7,8,9],Res)
|
X=1, У=7, Xs=[2,3], S=[8,9] Res=S
|
S=XY+Sp
|
S=17+43=50
prod(Xs,Ys,Sp)
|
prod([2,3],[8,9],S)
|
X=2, Y=8
Xs=[3], Ys=[9]
Res=S
|
Sp=XY+Sp
|
S=16+27=43
|
Prod([3],[9],S)
|
X=3, Y=9
Xs=[ ], Ys=[ ]
Res=S
|
S=XY+Sp
|
S=39=27
|
Prod([ ],[ ],0)
|
Рекурсиядан шығу
|
4. Мысал. Тізбекте берілген (тапсырылған) элемент индексін алу (табу)
DOMAINS
L=integer*
X=integer
PREDICATES
poluch(L,X,X)
CLAUSES
poluch([X|Y],1,X).
poluch([W|Y],N,X):-M=N-1,poluch(Y,M,X).
GOAL
poluch([1,2,3,4],3,X),write(X)
Бағдарламаның қадамдық жұмысы механизмін қарастырайық:
CALL: goal ( ) /* сыртқы сұраныс */
CALL & POLUSH [1, 2, 3, 4] , 3,/* 3 элементі үшін индексті алу процедурасын шақыру */
REDO: POLUSH ([1, 2, 3, 4], 3, _ ) /* процедура алғашында ереженің бірінші сөйлеммен салыстырылады, ол сәтсіз аяқталады, содан кейін екінші сөйлеммен салыстырылады, басы мен аяғына тізбекті бөлу операциясы, тізбектің бірінші элементі бөлініп алады да, стекке енгізіледі, М% айнымалысы мына мәнге ие болады 3 – 1 = 2: */2 = 2
CALL: polush ([2, 3, 4], 2, _ ) /* сөйлемнің екінші бөлігі орындалады, polush (X, M, X) рекурсивті процедурасын шақыру */
REDO: polush ( [2, 3, 4], 2, _ ) /* процедура бірінші сөйлеммен салыстырылады, өйткен салыстыру сәтсіз аяқталғандықтан, кері шегіну орындалады, содан соң екінші сөйлем орындалады, екінші элемент бөлініп алып, стекке енгізіледі, айнымалы мына мәнге ие болады М = 2 – 1 = 1*/1= 1
КF 12-06-07
CALL: polush ([3, 4], 1, _ ) /* сөйлемнің екінші бөлігі орындалады, polush (X, M, X) рекурсивті процедураны шақыру, процедура бірінші сөйлеммен салыстырылады, және де салыстыру жемісті (дұрыс) аяқталады:
*/ RETURN: polush ([3, 4], 1, 3)
/* Осы моменттен бастап, М айнымалысы үшін есептеулер аяқталады, стек операциялары басталады, яғни стектен мәндерді кезекпен шығару: */
RETURN: polush ([2, 3, 4], 2, 3)
RETURN: polush ([1, 2, 3, 4], 3, 3)
Write (3)
5. Мысал. Тізбектің максималды элементін табу.
DOMAINS
L=integer*
X=integer
PREDICATES
max(L,X)
CLAUSES
max([X],X).
max([X|Y],X):-max(Y,W), X>W,!.
max([X|Y],W):-max(Y,W).
GOAL
clearwindow, max([1,2,10,-4],X), write(X)
Бақылау сұрақтары
Операциялар, есептеу реті.
Жи-дің қазіргі жағдайы
Әдебиет тізімі
1,2,3..
лекция.
Тақырыбы: Прологта енгізу мен шығару, файлдардың өзара қарым-қатынасы, қатарларды өңдеу.
Құзыреттіліктер:
ПҚ2.Шет тілі шеңберіндегі құзіреттілік.
ПҚ3.Математикалық және іргелі жаратылыстану ғылыми және техникалық құзіреттілік.
ПҚ4. Компьютерлік құзіреттілік
Лекция жоспары:
Операция: тізбекке қатыстылығы (мүшелігі).
Операция: жалғастыру (конкатенация).
Операция: тізбекке элементті қосу
Лекция мазмұны
1. Операция: тізбекке қатыстылығы (мүшелігі).
Тізбекке қатыстылығының бағдарламасын құру келесі тұжырымдарға негізделеді:
Х бұл l – дің басы, немесе
Х l аяғына қатысты.
КF 12-06-07
Осыны екі сөйлем түрінде жазуға болады, олардың ішіндегі біріншісі жәй файл, ал екіншісі ө ереже :
Қатысты (X, [X | Аяғы ] ).
Қатысты ( X [ басы | Аяғы ] ): қатысты (Х, Аяғы).
Мысалы:
Қатысты (в, [а, в, с])
Қатысты ( [в, с], [а, [в, с]])
Операция: жалғастыру (конкатенация).
Конкатенация қатынасын анықтайтын бағдарлама:
Конк ( [ ] l, l ).
Конк ( [X | l1 ], l2, [x | l3 ]): - конк (l1, l2, l3).
Қолданылуы: құрылған бағдарламаны енді мынаған қолдануға болады
а) берілген тізбектерді біріктіру, мысалы:
?-конк([a,b,c],[1,2,3],L).
L=[a,b,c,1,2,3]
б) берілген тізбекті екі бөлікке бөлу үшін:
?-конк(L1,L2,[a,b,c]).
L1=[]
L2=[a,b,c];
L1=[a]
L2=[b,c];
L1=[a,b]
L2=[c];
L1=[a,b,c]
L2=[];
в) шаблон немесе үлгі түрінде берілген, қандай да бір шартқа жауап беретін, элементтер комбинациясы тізбегінде іздеу үшін:
?-конк(Do, [may|_]),[jan,feb,mart,apr,may,iun, iul, avg,sent, okt, nov, dec].
Do=[jan,feb,mart,apr]
Операция: тізбекке элементті қосу.
Тізбекке элементі қосу бағдарламасы:
қосу (X, L, [X | L]).
Операция: Тізбектен элементті алып тастау (жою).
Тізбектен элементті алып тастау (жою) бағдарламасы:
жою (Х, [Х | Аяғы ], Аяғы).
жою (Х, [Y | Аяғы ], [Y | Аяғы 1 ] ): - жою (Х, Аяғы, Аяғы 1).
Мысалы:
? – жою (а, [ а, в, а, а], L).
L=[в, а, а];
L=[а, в, а];
L=[а, в, в].
Қолданылуы:
? – жою (а, L, [1, 2, 3]).
L=[а, 1, 2, 3];
КF 12-06-07
L=[1, а, 2, 3];
L=[1, 2, а, 3];
L=[1, 2, 3, а];
5. Операция: ішкі тізбек.
Ішкі тізбек бағдарламасы:
Ішкі тізбен (S, L):- конк (L1, L2, L), конк (S, L3, L2).
Оны былайша түсіндіруге болады:
S L-дің ішкі тізбегіне жатады, егер
1) L-ді 2 тізбекке L1, L2 бөлуге болады және
L2-ні 2 тізбекке S және L3-ке бөлуге болады.
? – ішкі тізбек (S, [a, в, с])
S=[ ];
S=[а];
S=[а, в];
S=[а, в, с];
S=[в].
Операция: орындарын ауыстыру
Орын ауыстыру қоныстары бағдарламасы бірінші тізбек түріне байланысты екі жағдайды қарастыруға негізделген:
Егер 1- ші тізбек бос болса, онда 2-ші тізбен те бос болуы керек.
Егер 1- ші тізбек бос болмаса, онда ол келесі түрде болады [x/L], және осындай тізбекте орын аустыруды келесі түрде жүргізуге болады: басында L1 тізбеген алу – L орнын ауыстыру, ал кейіннен х-ті өзіндік позиция L1- ге енгізу.
Пролог тілінде бағдарлама:
Орын ауыстыру( [ ], [ ]).
Орын ауыстыру ( [ X/L], Р):-орын ауыстыру (L, L1), енгізу (X, L1, P).
Бақылау сұрақтары
1.Прологта енгізу мен шығару
2.Файлдардың өзара қарым-қатынасы, қатарларды өңдеу.
Әдебиет тізімі
1,2,3..
Лекция
Тақырыбы: Пролог бағдарламалау жүйесінің стандартты предикаттары
Құзыреттіліктер:
ПҚ2.Шет тілі шеңберіндегі құзіреттілік.
ПҚ3.Математикалық және іргелі жаратылыстану ғылыми және техникалық құзіреттілік.
ПҚ4. Компьютерлік құзіреттілік
Лекция жоспары:
Пролог бағдарламалау жүйесінің стандартты предикаттары
КF 12-06-07
Лекция мазмұны
Пролог бағдарламалау жүйесінің стандартты предикаттары
Стандартты (жүйеге енгізілген) предикаттар әртүрлі функциялар орындайды. Олар: әртүрлі типтегі айнымалыларды енгізу - шығару, файлдармен жұмыс істеу, DOS функцияларын орындау, жолдарды өңдеу, графикалық режимді қолдау, басқа да бағдарлама жүйелерімен (Си, Паскаль) интерфейсті қалтамасыз ету және т.б. жүйеде барлығы 200 стандартты предикаттар бар.
Стандартты предикаттар қолдану үшін предикат атын, оны шақыру тәсілдері, параметр мәндерінің типтері мен саны, сонымен қатар оларды тасымалдау режимдерін білу қажет. Тасымалдау режимі әдетте шаблон түрінде жазылады. (Шаблон) ол параметрлердің қайсысы предикат үшін енгізү (шаблонда і немесе енгізу деп белгіленеді), ал қайсысы шығыс (шаблонда о немесе шығару деп белгіленеді) екенін көрсетеді. Турбо-Прологтың қалған стандартты предикаттарын келесі форматта көрсетейік:
предикат(аргументтер тізбегі)(домендер типі): (шаблон).
Makewindow (терезеНом, экрАшу, РамкаАшу, РамкаЖолы, Жол, Баған, биіктік, Ені, ТерТазалау, РамкаЖолыПоз, шекараБелг) (integer, integer, integer, string, integer, integer, integer, integer, integer, integer, string): (енг, енг, енг, енг, енг, енг, енг, енг, енг, енг, енг), (шығ, шығ, шығ, шығ, шығ, шығ, шығ, шығ, шығ, шығ, шығ). Makewindow Предикаты аргумент ТерНом нөмірімен терезені құрады. Предикаттың қалған аргументтері келесі мағынада болады:
ЭкрАшу – символ түсі мен фонын анықтайды;
РамкаАшу – нөлден басқа мәнде терезенің шекара сызықтары сызылады;
РамкаЖол – Терезе контуры жоғарғы шекарасы ортасында орналасқан жолды көрсетеді;
Жол, Баған – терезенің жоғарғы сол бұрышының вертикалды және горизонталды координаттары;
Биіктігі, ені – терезенің биіктігі (жолдар саны) және ені (бағандар саны);
Терезені тазалау анықтайды, терезені құраған соң, оны тазалау керек пе, жоқ па; 0 – терезені тазаламау, 1 – терезені тазалау;
РамкаЖолыПоз терезе басының орналасу орнын анықтайды (терезе рамкісінің жоғарғы сызығы ішінде): - 1 = Аты центрде; № = көрсетілген позицияда атын орналастырады;
ШекараБелгілері терезе рамкасын қалай салу керектігін көрсетеді.
Бұл аргумент қатал түрде 6 символдан тұрады, мыналарды білдіреді: жоғарғы сол бұрышы, жоғарғы оң бұрышы, төменгі сол бұрыш, горизонталдық сызық және сәйкесінше вертикаль сызық. Мысалы: <<|218|191|192|217|196|179>> - бір сызықтан тұратын шекаралар; <<|201|187|200|188|205|186>> - екі линиядан тұратын шекаралар; <<++++| - >> - шекараға сипаттаудың басқа вариантын.
Readchar (Айнымалы символы) (char): (шығ) – күнделікті енгізу құралынан, яғни клавиатурадан жалғыз символы оқиды, әзірше ол Readdevice көмегімен өзгертіледі.
Readdevice (Символ Файл Аты) (symbol): - (енг), (шығ) – күнделікті шығару құрылғысын бекітеді немесе орындайды, (енг): Симвалич Файл Аты мәліметтері бар ашық файлға күнделікті енгізу құрылғысын тағайындайды. Ашық файл стандартты файлдардың бірі немесе модификация үшін ашылған, символикалық аты бар компьютерді қолданушының кез – келген файлы болуы мүмкін (шығ):
КF 12-06-07
СимвФайлАтын күнделікті енгізу құрылғысы атымен байланыстырады. Енгізу үшін ашылуы мүмкін стандартты файлдар: сот 1 – байланыстың кезекті портынан оқу; keyboard – клавиатурадан оқу (үндемей - ақ); stdin – DOS стандартты енгізуден оқу.
Readint (Мақсат айнымалы) (integer): (шығ) – күнделікті енгізу құрылғысынан бүтін санды оқиды. Символдар қайта өзгерту жүргізілмейді, Readint каретканы қайтару символын (ASCII 13) кездестіргенше.
Readln (айнымалы жол) (string): (шығ) – ASCII 13 каретканы қайтару символына дейін күнделікті енгізу құрылғысынан символдар жолын оқиды. Экранда оқылатын ең үлкен жол 147 симвоға тең.
Write (l1, l2, l3, … ln): (енг, енг, енг, …, енг) – күнделікті терезеге немесе күнделікті енгізу құрылғысына айнымалылар немесе константалар мәнін енгізеді. Write ie аргументтің өзіндік нольге тең емес санымен байланысты болуы мүмкін. Аргументтер бос айнымалылар болуы мүмкін емес.
Writedevice (симвФайлАты) (symbol) (енг), (шығ) – күнделікті енгізу құрылғысын бекітеді немесе орындайды. (енг): күнделікті енгізу құрылғысын СимвФайлАты мәліметі бар ашық файлға қайта тағайындайды. Ашық файл стандарттық символдық файлдың бірі немесе жазу немесе модификация үшін ашылған компьютер қолданушысының кез – келген файлы болуы мүмкін. (шығ): файлдың символдық атын күнделікті енгізу құрылғысымен байланыстырады. Шығару үшін келесі қондырылған (енгізілген) файлдар қолданылуы мүмкін: сот 1 – тізбекті порт; printer – принтердің параллельді порты; screen – монитор экраны; stdout – DOS – тың стандартты шығысы; stderr – стандартты қателер файлы .
RemoveWidow / 0 – ашық терезені жояды да, алдындағы терезеге көшеді.
Writef (СолФорматы, Apr1, Apr2, Apr3, … ) (енг, енг, енг ) – форматталған шығысты орындайды. Apr1 – AprN аргументтері константалар немесе айнымалылар басуы мүмкін. Форматтар кәдімгі текстің ФорматЖолы жолы түрінде беріледі, мұнда символдар % жол аргументі орнын ескереді. Форматтың рұқсат етілген спецификациялары кәдімгі символдардан тұрады. Олар модификациясыз баспаға шығарылады. Форма спецификациясының форматы % - т.pf. Спецификация форматы білдіреді: - (дефис) көрсетеді, поле солдан теңеледі;
т поле – ондық сан, поленің минимум мөлшерін көрсетеді. f поле келесі форматтарды сипаттайды:
f – бекітілген есептеудің ондық жүцесіндегі заттық формат;
E - экспоненциалды көрініс формасындағы заттық фомат;
G – қысқа форматтағы үндемеу бойынша қолданылады заттық формат;
D – символдар немесе бүтін ондық сандар форматы;
U – таңбасыз ондық сандар ретінде бүтін сандар немесе символдар форматы;
X – 16 – лық сандар ретінде бүтін сандар немесе символдар форматы;
C – символдар ретінде бүтін сандар немесе символдар форматы;
R – мәліметтер базасы көрсеткіші нөміріне сілтеме ретінде аргументті қолданады;
X – ұзын 16 – лық сан (жолдар, мәліметтер базасы көрсеткішінің нөмірі) ретінде аргументті қолданады;
S – формат жол ретінде (символдар және жолдар);
КF 12-06-07
Бақылау сұрақтары
Предикаттар логикасы.
Қайтару механизмі.
Мәліметтерді енгізу шығарудың предикарттары.
Әдебиет тізімі
1,2,3..
лекция.
Тақырыбы: Жүйелік операторлар, анықталған предикаттар. Мәліметтер қорын құру жолдары.
Құзыреттіліктер:
ПҚ2.Шет тілі шеңберіндегі құзіреттілік.
ПҚ3.Математикалық және іргелі жаратылыстану ғылыми және техникалық құзіреттілік.
ПҚ4. Компьютерлік құзіреттілік
Лекция жоспары:
Жүйелік операторлар, анықталған предикаттар.
Мәліметтер қорын құру жолдары
Лекция мазмұны
Asserta (<факт>) (dbasedom) (енг) – мәліметтердің резиденттік базасы басына факты (тұжырымдама) енгізеді (basedom ретінде белгіленетін, домен, database бөлімінен әрбір предикат үшін автоматты түрде жарияланады).
Assertz (X) (dbasedom): (енг) – мәліметтердің резиденттік базасының соңына Х фактісін (тұжырымын) енгізеді.
Retract (X): (енг) – мәліметтер базасына тұжырымды іздеу жүзеге асырылады, оның басы мен денесі Х термімен салыстырылады. Бірінші осындай тұжырым мәліметтер базасынан жойылады. Аргумент (терм Х) құрама терммен нақтылануы тиіс:
Retractall (X): (енг) – мәліметтер базасынан барлық тұжырымдарды жояды, олардың функтор мен арносттылыған Х – пен салыстыруға болады.
Cursor (жол, саны) (integer, integer): (енг, енг), (шығ, шығ) – (енг, енг) – курсорды координаттары (жол, саны) позициясына орналастырады.
6. Мысал. Конкатенация қатынасын қолдана, тізбектің 2 – ші элементін баспаға шығару.
DOMAINS
Z=integer
X, Y=integer*
PREDICATES
konk(X,X,X)
vtor(Z,X)
CLAUSES
konk([],L,L).
konk([X|L1],L2,[X|L3]):-konk(L1,L2,L3).
vtor(X,L):-konk(_,[_,X|_],L).
GOAL
clearwindow, L=[1,2,3,4], vtor(X,L), write(X)
КF 12-06-07
7. Мысал. Пәндер бойынша <<4>> және <<5>> бағасы бар студенттер фамилиясын экранға шығару.
DOMAINS
Col=integer*
Nam=symbol*
PREDICATES
find(Col,Nam,Nam)
CLAUSES
find([ ],[ ],[]):-!.
find([H1|T1],[H2|T2][H3|T3]):-H1>=4, H1<=5, write(H2," ",H2,” ”,H3), nl,
find(T1,T2,T3);
find(T1,T2,T3).
GOAL
clearwindow, makewindow(1,1,4,"find",1,1,10,20),
find([3,2,4,5],[ivanov,petrov,kozlov,sidorov],[mat,xim,inf,fiz]).
8. Мысал. Меню пунктерін жүзеге асыратын, бағдарламаны құру: фамилиясы, жазған нөмірі, сұрақтарды қарастырып шығу бойынша іздеу.
DOMAINS
Iniz=inizial(FIO,POL,GOD)
In=ini(FIO,POL,GO)
i=integer
FIO,POL,Text,Go=symbol
GOD,NUM=integer
g=gr(NUM,Iniz)
c=gh(Text,In)
PREDICATES
bezr(g)
vopros(c)
vopros1(c)
start
process(i)
patch
GOAL
start.
CLAUSES
/* Мәзір құру процедурасы */
start:-makewindow(1,2,7,"Жұмыссыздар тізімі",0,0,25,80),
clearwindow,
patch.
/* Мәзірді басқару процедурасы */
patch:-cursor(7,0),
write("1-Фамилия бойынша іздеу"),nl,
write("2-Номері бойынша іздеу"),nl,
write("3-Сұрақтарды көру"),nl,
КF 12-06-07
write("4-Шығу"),nl,
write("=>"),
readint(Choise),
Choise>=0,
Choise<4,
clearwindow,
process(Choise),
retractall(_);
clearwindow,
Choise=4,
retractall(_),
removewindow.
bezr(gr(1,inizial("An","jen",1980))).
bezr(gr(2,inizial("Sim","muj",1979))).
bezr(gr(3,inizial("Pet","muj",1981))).
bezr(gr(4,inizial("Tor","jen",1970))).
vopros(gh("Енгізілген номер",ini("ФИО","Жынысы","Туылған жылы"))).
vopros1(gh(" номер",ini("Енгізілді: ФИО","Жынысы","Туылған жылы"))).
process(1):-makewindow(1,2,7,"Фамилия бойынша іздеу",0,0,25,80), nl,
write("Фамилия енгіз: "), readln(F),nl,
bezr(gr(N,inizial(F,P,GOD))),write("Номер: ",N," ФИО:"
,F," Жынысы: ",P," Туылған жылы :", GOD).
process(2):-makewindow(1,2,7,"Номер бойынша іздеу",0,0,25,80), nl,
write("Номерін енгіз: "), readint(N),nl,
bezr(gr(N,inizial(F,P,GOD))),write("Номер: ",N," ФИО:"
,F," Жынысы: ",P," Туылған жылы :", GOD).
process(3):-makewindow(1,2,7,"Сұрақтарды көру",0,0,25,80),
vopros(C),write("Номер бойынша іздеу сұрағы: "), nl,
write(C),nl,nl, vopros1(C1),
write("Фамилия бойынша іздеу сұрағы: "), nl,
write(C1).
9. Мысал. Стандартты предикаттарды және тізбектермен операцияларды жүргізуді қолдана, келесі мәзір пунктерін жүзеге асыратын бағдарламаны жазыңыз: тізбектін көрсетілген орнына қосу; көрсеткен элементті жою.
DOMAINS
I,J=integer*
N=integer
PREDICATES
lister(I)
process(N,I)
writer(I)
writers(I)
inserts(N,I,I)
insert(I)
КF 12-06-07
deletes(N,I,I)
delete(I)
CLAUSES
lister(I):-
makewindow(1,2,5,"Menu",1,1,10,20),
write("inse.эжхз-0rt-1"),nl,
write("delete-2"),nl,
write("writer-3"),nl,
write("exit-4"),nl,
write("input N=>"),readint(L),L<5,L>0,process(L,I);lister(I).
process(1,I):-insert(I).
process(2,I):-delete(I).
process(3,I):-writer(I).
process(4,I):-exit.
insert(I):-
makewindow(2,6,3,"Insert",1,1,10,20),
write("Input # "),
readint(N),
inserts(N,I,J),
lister(J).
inserts(1,I,J):-
write("Input New=>"),
readint(U),J=[U|I],!.
inserts(N,[H|L1],[H|L2]):-N1=N-1, inserts(N1,L1,L2).
delete(I):-
makewindow(3,7,5,"delete",1,1,10,20),
write("Input N=>"),readint(W),deletes(W,I,J),lister(J).
deletes(1,[H|T],T):-!.
deletes(N,[H|L1],[H|L2]):-N1=N-1,deletes(N1,L1,L2).
writer(I):-
makewindow(4,6,43,"write",1,1,15,20),
writers(I),readchar(U),lister(I).
writers([ ]):-!.
writers([H|T]):-write(H),nl,writers(T).
GOAL
lister([1,2,3,4,5,6,7]).
Бақылау сұрақтары
Asserta
Retract
Cursor
Әдебиет тізімі
1,2,3..
лекция.
Тақырыбы: Қорытынды дәріс. Пролог тілінің даму жолдары мен деңгейлері
КF 12-06-07
Құзыреттіліктер:
ПҚ2.Шет тілі шеңберіндегі құзіреттілік.
ПҚ3.Математикалық және іргелі жаратылыстану ғылыми және техникалық құзіреттілік.
ПҚ4. Компьютерлік құзіреттілік
Лекция жоспары:
1. Пролог тілінің дамуы
2. Деңгейлері
Лекция мазмұны
Пролог базасы үлгілерді салыстыру, мәліметтерді иерархиялық құрылыста көрсету және автоматты түрде қайтарудан құрылған механизмдердің шектелген тізбегінен тұрады, осы шағын тізбек ғажайып қуатты және икемді бағдарламалық аппаратты құрайды. Пролог тілінің жетістіктері мынаған негізделген, бір жағынан, ондағы логикалық формулаларды қолдану арқылы көптеген практикалық есептерді жазып шығуға болады, ал екінші жағынан қарапайым интерпретациялары формулалардың табылған және логикалық бағдарламалау жүйесін жеткілікті дәрежеде тиімді жүзеге асыру енгізілген, Пролог әсіресе, ішінде объекттері және олардың арасында қатынастары болатын есептерді шешуге жақсы бейімделген. Тіл құрылысында мәліметтер базасымен қарапайым және тиімді жұмыс істеу мүмкіндіктері қарастырылған, бұл оның негізінде әртүрлі типтегі ақпараттық–анықтама және экспертті жүйелерді құруға мүмкіндік береді.
Пролог тілінің элементтері қарастырылды: айнымалылар, құрылыстар, сұрақтары, салыстырулар, фактілер, ережелер. Сұрақтардың қалай қойылатыны көрсетілген, белгілі фактілер негізінде ережелер қарастырылған. Сұраныстарды бағдарлама ұсыныстарымен салыстыру арқылы бағдарламаның орындалу алгоритмі көрсетілген. Бағдарлама мысалында: вертикалды кесінділер қатынастары қарастырылған және бағдарлама құрылысының барлық бөлімдері сипатталған.
Рекурсивті функциялар сұрақтары, қорытынды есептеулер және арифметикалық белгілер қарастырылған. Рекурсивті есептеулер факториалдық есебі мысалында көрсетелген.
Тізімдер, тізімдермен негізгі және қосымша операциялар, стандартты предикаттар, тізім элементерін баспаға шығару бағдарламасының мысалы, және басқа да бағдарлама мысалдары келтірілген.
Бақылау сұрақтары
Тізім
Деңгей
Әдебиет тізімі
1,2,3..
КF 12-06-07
ӘДЕБИЕТТЕР
Мусабекова Л.М., Дуйсенов Н.Ж., Кошкинбаева М.Ж. Функциональды және логикалық бағдарламалау / Оқу-әдістемелік құралы, Шымкент, 2003ж.
Агафонов В.Н., Борщев В.Б., Воронков А.А. Логическое программирование в широком смысле. Пер. с анг. с фр.-М.: Мир, 1988.
А.Тей П., Грибуомон и т.д. Логический подход к искусственному интеллекту. –М.: Мир, 1990.
Братко И. Программирование на языке Пролог для искусственного интеллекта. –М.: Мир, 1990.
Дж. Стобо. Язык программирования Пролог. –М.: Радио и связь, 1993.
Ин Ц., Соломон Д. Использование Турбо-Пролога: Пер. с анг. – М.: Мир, 1987.
К.Кларк. Введение в логическое программирование на Micro Prolog-е.
Клоксин, Меллиш. Программирование на языке Пролог. –М.: Мир, 1987.
Котенко И.В. Логическое программирование на Прологе. –СПб.: ВАС, 1993.
Л.Стерлинг, Э.Шапиро. Искусство программирования на языке Пролог. – М.: Мир, 1990.
Марселлус Д. Программирование экспертных систем на Турбо-Прологе.: Пер. с анг. – М.: Финансы и статистика, 1994.
Хогтер. Введение в логическое программирование. –М.: Мир, 1988.
Язык Пролог в пятом поколении ЭВМ. Сборник статей под редакцией Ильинского. –М.: Мир, 1988.
KF 12-06-08
Қазақстан Республикасының білім және ғылым министрлігі
Халықаралық гуманитарлық –техникалық университеті
«Жаратылыстану - техникалық» факультеті
«Есептеу техникасы және стандарттау, сертификаттау» кафедрасы
«Функциональдық және логикалық бағдарламалау» пәні
Мамандық «5В070400-Есептеу техникасы және бағдарламалық қамтамасыз ету»
5>4>
Достарыңызбен бөлісу: |