- •Қазақстан республикасы білім және ғылым министрлігі м.Х.Дулати атындағы тараз мемлекеттік университеті
- •Әдістемелік нұсқау Тараз 20___
- •Функционалды бағдарламалау ( haskell тілі) hugs 98 де жұмыс істеу негіздері
- •«Haskell тілінің негіздері»
- •Логикалық бағдарламалау
- •Бақылау мысалы
- •Жұмысқа тапсырма
- •Негізгі түсініктер
- •Жұмысқа тапсырма
- •Тапсырма варианттары
- •Бақылау мысалдары
- •Бақылау мысалы
- •Жұмысқа тапсырма
- •Тапсырма варианттары
- •7.№1 Сөж тапсырмалары. Жоғарғы ретті функциялар
- •Қосымша
Бақылау мысалы
Пролог тіліндегі қарапайым программа.
man(nikolay).
man(stepan).
woman(lida).
parent(lida, stepan).
parent(nikolay, stepan).
mother(X,Y):-parent(X,Y),woman(X).
Жұмысқа тапсырма
1. Туыстық қатынастарды сипаттап көрсететін, графты бейнелеу керек.
2. Туыстық қатынастарды сипаттайтын программа құру керек.
Факт ретінде унарлық қатынастарды сипаттау керек: еркек, әйел; және бинарлық қатынастарды сипаттау керек: некеде_тұрады, ата-ана_бала.
Келесі қатынастарды анықтайтын ережелерді жазу керек: күйеуі, әйелі, ата-ана, бала, сын, қыз, ұл, әпке, көке, апай, әже, ата.
3. Барлық алынған қатынастарды тексеретін тестке қажет деректерді таңдап алу керек. Тестке қажет деректердің құрамында келесі операциялар болу керек: «ЖӘНЕ», «НЕМЕСЕ», «ЕМЕС».
4. Жасалған жұмыстың есебін дайындау.
2.
3.Зертханалық жұмыс№ 8. Пролог тідінде рекурсивті ережелер мен құрылымдық деректерді қолдану.
Жұмыстың мақсаты
Есепті шешу кезінде рекурсивті ережелер мен деректердің құрылымдық типтерін пайдалануды үйрену.
Жұмысқа дайындық үшін берілетін тапсырма
«Рекурсивті ережелер», «Құрылымдық деректер» тақырыптарын қайталау.
Жұмыстың орындалу реті
1. Бақылау мысалдарын орындау.
2. Жүйеде вариантқа сәйкес есепті шешетін программа құру.
3. CH06EX03.pro программасын модификациялау және деректер құрылымын бейнелейтін мақсаттар таңдап алу.
4. Орындалған жұмыстың есебін құру.
Есептің мазмұны
1. Пролог тіліндегі программаның бастапқы мәтіні.
2. Тест деректері мен программаның жұмысының нәтижесін теру.
3. Есепті шешу кезінде жіберілген қателердің тізімі мен талдауы.
4. Жұмыс бойынша қорытынды.
Негізгі түсініктер
Қатынастың өзі қолданылатын қатынастар анықтамасы рекурсивті деп аталады. Рекурсия – Пролог тілінде программалаудың негізгі механизмдерінің бірі. Процедуралық тілдерде рекурсияны, циклдерді қолдану кезінде жететін эффектілерге қол жеткізу үшін қолдануға болады. «Ата тегі» [1, 2] қатынасын анықтау рекурсияны қолданудың мысалы бола алады. Берілген қатынасты екі ереже көмегімен бейнелеуге болады. Бірінші ереже – жақын ата-тектерін анықтаса, екіншісі – алыстарын анықтайды. Бірінші ережені «ата-ана» қатынасы арқылы оңай құруға болады:
Ата-тегі (X, Z) :- ата-ана(X, Z).
Дәл осылай екінші ережені құруға да болады:
Ата-тегі(X, Z) :- ата-ана(X, Z).
Ата-тегі(X, Z) :- ата-ана(X, Y), ата-ана(Y, Z).
Ата-тегі(X, Z) :- ата-ана(X, Y1), ата-ана(Y1, Y2), ата-ана(Y2, Z).
…
Қатынасты жоғарыдағыдай етіп сипаттау, белгілі бір шекте ғана жұмыс істейді, яғни ата-тегін белгілі бір атаға дейін анықтайды, себебі, ата-тегі мен ұрпақ арасындағы байланыс ұзындығы қатынасты анықтайтын сөйлемнің ұзындығымен шектелген. Осындай қатынастарды рекурсияның көмегімен сипаттаған ыңғайлы. Ережелер келесі түрде болады:
Барлық X және Z үшін,
X – Z-тің ата-тегі, егер
Y бар болса,
X - Y –тің ата-анасы және
Y – Z-тің ата-тегі болса.
немесе Пролог тілінде:
ата-тегі(X, Z) :- ата-анасы(X, Y), ата-тегі(Y, Z).
Сонымен, «ата-тегі» қатынасын анықтау келесі түрде жүргізіледі:
Ата-тегі(X, Z) :- ата-ана(X, Z).
Ата-тегі(X, Z) :- ата-ана(X, Y), ата-тегі(Y, Z).
Рекурсивті ережелерді сипаттау кезінде, рекурсияның циклде тоқтап қалуын болдырмау үшін мұқтят болу керек. Ол үшін кез-келген қатынасты рекурсивті түрде анықтау, кем дегенде екі ережеден тұруы керек:
Қатынастың бастапқы түрін анықтайтын, рекурсивті емес ереже, яғни рекурсияны тоқтату кезіндегі қатынас түрі;
Рекурсивті ереже – алғашқы мақсат, осы ереже денесінде алғашқы аргументтің жаңа мәндері жасалады. Ары қарай, аргументтің жаңа мәндері қолданылатын рекурсивті мақсат орнатылады.
Жоғарыда келтірілген «ата-тегі» қатынасының анықтамасында, бірінші фраза осы қатынастың бастапқы түрін анықтайды. Ол қатынас анықталған кезде, рекурсия тоқтатылады. Екінші фраза – бұл рекурсивті ереже. Әр шақырылған сайын бұл ереже бір саты жоғарылап отырады. «Ата-ана (X, Y)» мақсаты Y айнымалысының мәнін жасап шығарады, ал «ата-тегі (Y, Z)» рекурсивті мақсатында осы жаңа аргумент қолданылады.
Құрылымдық объектілер (немесе объектілер) – бұл өз кезегінде құрылым бола алатын, бірнеше компоненттен тұратын объектілер. Пролог тіліндегі құрылымдар Паскальдағы жазбаларға немесе Си тіліндегі құрылымға ұқсас болып келеді. Прологта құрылымдық объектілер функтормен немесе аргументтермен анықталады. Мысалы, үш компоненттен тұратын датаны көрсету үшін (күн, ай, жыл), үш аргументті «дата» функторының анықтамасын қолдануға болады:
date (11, january, 1978).
1978 жылдың қаңтарының кез – келген күнін, айнымалысы бар құрылым ретінде алуға болады:
date (Day, january, 1978).
Кіріктірілген құрылымдарды қолдануды келесі мысалдан көруге болады:
human(sergei, ivanov, date(10, may, 1975)).
human(ivan, petrov, date(15, october, 1969)).
Мұндай деректер базасымен әрекеттесу ыңғайлы болу үшін, сұраныстарды сипаттау керек. Мысалы:
human(FirstName, LastName, _). деректер базасындағы барлық адамдарды санайтын, % сұраныс
man (FirstName, LastName, date(_, _, 1975). 1975 жылы туылған % барлық адамдар
birthday(human(_, _, Date), Date). көрсетілген туылған күні бойынша адамды табуға мүмкіндік беретін, % сұраныс.
