- •1. Глоссарий
- •2. Дәрістер
- •2.2 Дəріс сабақтарының конспектілері
- •2 Дəріс тақырыбы. Прологтың логикалық негіздері
- •3 Дəріс тақырыбы. Прологтың негізгі түсінігі.
- •4 Дəріс тақырыбы. Рекурсия
- •5 Дəріс тақырыбы. Прологта бағдарламаның орындалуын басқару.
- •6 Дəріс тақырыбы. Тізімдер.
- •7 Дəріс тақырыбы. Тізімдерді сұрыптау.
- •3. Зертханалық сабақтар
- •2.3 Зертханалық сабақтардың жоспары.
- •1 Зертханалық жұмыс. Резолюциялар
- •2 Зертханалық жұмыс. Предикаттарды модификациялау
- •3 Зертханалық жұмыс. Палиндромдар (тізіммен жұмыс істеу)
- •4 Зертханалық жұмыс. Циклдер
- •5 Зертханалық жұмыс. Сыртқы мақсаттармен жұмыс істеу
- •4 Студенттердің өздік жұмыстары
- •4.1. Студенттің өздік жұмыстарының құрылымы:
- •4.2 Студенттік оқытушымен өздік жұмысытарының құрылымы:
3. Зертханалық сабақтар
2.3 Зертханалық сабақтардың жоспары.
1 Зертханалық жұмыс. Резолюциялар
Тапсырма: үшінші дəрістегі мысалдың білім қорын қарастырып, төмендегідей кодты тереміз:
DOMAINS /* раздел описания доменов */
s=string /* вводим синоним для строкового типа данных */
PREDICATES /* раздел описания предикатов */
mother(s,s) /* предикат мама будет иметь два аргумента строкового типа */
grandmother(s,s) /* то же имеет место и для предиката бабушка */
CLAUSES /* раздел описания предложений */
mother("Наташа","Даша"). /* "Наташа" и "Даша" связаны отношением мама */
mother("Даша","Маша"). /* "Даша" и "Маша" также принадлежат отношению мама */
grandmother(X,Y):- /* X является бабушкой Y, если найдется такой Z, что */
mother(X,Z), /* X является мамой Z, а */
mother(Z,Y). /* Z является мамой Y */
Программаны жүргізіп нəтижені сұраулар қойып бақылау.
Негізгі əдебиет 1 [87-98]
Қосымша əдебиет 3 [17-25]
Бақылау сұрақтары:
1. Ендіру/шығару пердиккаттарының ерекшеліктері қандай?
2. Fail предикаты не үшін қолданылады?
3. bound предикат қандай жағдайда «шын» болады?
4. Ноль- орынды предикаттың функциясын түсіндіріңіз.
5. upper_lower предикатының қолдану варианттарын келтіріңіз.
2 Зертханалық жұмыс. Предикаттарды модификациялау
Тапсырма: Барлық қыздардың аттарын шығаратын предикатты енді ол аттардың барлығын емес тек белгілі бір атқа дейін ғана шығаратындай етіп тағы бір рет модификациялайық.
Предикатта қыздың аты ( бұл аттан кейін қыздардың аттарын экранға шығару үзілуі керек)
көрсетілген тек бір ғана кіретін аргумент қана болады. Ереженің денесіне ағымдағы қыздың атын предикаттың аргументі түрінде көрсетілген қыздың атымен салыстыратын мақсатастыны қосу керек. Бұл мақсат астыдан кейін:
show_names3(Daughter):–
mother(_,Name), /* Name айнымалысын қыздың атымен белгілейді */
write(" ", Name), nl, /*Name айнымалысының мəнін шығарады*/
Name=Daughter, /* Name жəне Daughter қыздар аттарының сəйкестігін тексереді. Сəйкес емес болғанда шегіну қайта оралу стекінде сілтеушісі сақталған жерге шақырылады.
Сəйкес болған жағдайда (кесудің бар болғанның арқасында) іздестіруді жəне қыздардың аттарын шығаруды аяқтайды*/
write("Ізделген адам табылды!"),!.
Бұл предикат Name айнымалысын біреудің қызының атымен нақтылайтын болады жəне бұл айнымалының мəнін экранға шығарады. Содан кейін Name айнымалының мəні Daughter айнымалының мəнісімен салыстырылатын болады. Сəйкес болмаған жағдайда бұл мақсат асты ереженің бірінші мақсатастысына шегінуді шақыра отырып, сəтсіздікке ұшырайды. Аттар сəйкес болған кезде мақсатасты сəтті болады да, басқару кесу предикатына ие болады. Ол əрдайым шынайы болады жəне сол жақта орналасқан мақсатастылар үшін шегінуді рұқсат етпейді. Осымен show_names3 предикатының жұмысы аяқталады. Яғни, бұл ережеде шегінулер Name айнымалысының ағымдағы мəні Daughter айнымалысының мəнімен
сəйкес келгенше дейін жалғаса береді.
Негізгі əдебиет 5 [20-38]
Қосымша əдебиет 1 [5-29]
Бақылау сұраулары:
1. GOAL сөзінің жұмысын тұсіндіріңіз.
2. Пролог жүйесінде ендірі/шығару қалай ұйымдастырылады?
3. Циклдік рекурсия қалай ұйымдастырылады?
4. Қайтару нүктесі қалай көрсетіледі?
5. Предиктты модификациялау дегеніміз не?
