Тапсырмалар және оларды орындау тәртібі
Турбо пролог тізімдерге бірқатар операциялардың орындалуына мүмкіндік береді.
тізімге тиісті болуды тексеру
Осыған байланысты мынадай программа жазайық:
Domains
n=integer*
m=sumbol*
find(integer,n)
find(symbol,m)
append(n,n,n)
append(m,m,m)
clauses
find(H,[H|_]).
Find(H,[_|T]):-
Find(H,T).
append([],L,L).
append([H|T1],L2,[H|T3):-
append(T1,L2,T3).
Бақылау сұрақтары:
Тізім белгісі қандай?
Тізімге қандай операциялар қолданылады?
Тізімді мәліметтер қорының элементтерінен қалай құруға болады?
Практикалық сабақ №5
Тақырыбы: Ағаштармен жұмыс
Сабақтың мақсаты: TurboProlog ортасында программаларды құру кезінде рекурсивті алгоритмдерді қолдану біліктерін қалыптастыру
Материалдар және жабдықтар: ДК, Turbo Prolog программалау ортасы
Тапсырмалар:
Ағаштың максимал элементін табу.
Ағаш тереңдігін есептеу
Берілген ағаш элементтерін тізімге жазу: а) «тереңге» айналу кезінде; б) * «енімен» айналу кезінде;
Түбірден берілген элементке дейін жолды іздеу: а) элементтер тізбегі ретінде; б) тізім ретінде.
Ағаштың төбесінің санын анықтау.
Ағаштың жапырақты төбелерінің санын анықтау.
Мәндері берілген диапазонда жатқан ағаштың төбелерінің санын анықтау.
Т1 бқтағы Т ағашының бқтағы болатынын анықтау.
Жұмыстың орындалу реті мен мазмұнын әдістемелік сипаттау
Ағаштар рекурсивті мәліметтер құрылымына жатады Ағаштың әрбір бұтағыда ағаш болып табылуы маңызды, сондықтан құрылым рекурсивті болады.
Ағаштар мәліметтер типі ретінде
Турбо Пролог көрсеткіштер автоматты түрде құрылатын және өңделетін рекурсивті типтерді анықтауға мүмкіндік береді.Мысалыға, ағаштарды келесі түрде анықтауға болады:
domains
treetype = tree (string, treetype, treetype)
Бұл декларация ағаштардың tree (ағаш) функторы түрінде жазылатынын көрсетеді, оның аргументтері жол және басқа екі ағаш болады.
Бірақ бұл дұрыс емес, себебі рекурсияны аяқтайтын әдіс жоқ. Негізінен ағаш шексіз таралып кете бермейді. Кейбір түйіндер басқа ағаштармен байланысты болмайды. Прологта көрсеткіштерге ену болмайды. Шешімі екі ағаш типін анықтаудан тұрады – қарапайым және бос. Бұл ағаштың екі түрлі сипаттамасы болатынын білдіреді: үш аргументті tree (ағаш) немесе аргументсіз empty (бос).
domains
treetype = tree (string, treetype, treetype); empty
tree (ү шаргументі бар функтор) аты және empty (аргументсіз функтор) программистпен құрылады, олардың ешқайсысына да Прологта анықталған мән жоқ. Дәл солай xxx және yyy де қолдануға болады.
Прологтык программа:
tree (”Катя”,
tree (”Миша”,
tree (”Вова”, empty, empty),
tree (”Лида”, empty, empty)),
tree (”Люда”,
tree (”Зина”, empty, empty),
tree (”Петя”, empty, empty)))
Оқылуға оңай болу үшін программа бөлімдерге бөлінген. Бірақ Прологта мұндай бөлімнің қажеті жоқ, бірақ ағаштарды дұрыс жазу кезінде бөлімге бөлу қажет етілмейді. Дәл мұндай құрылым басқа әдіспен де құрылады:
tree (”Катя”,
tree (”Миша”,
tree (”Вова”, empty, empty),
tree (”Лида”, empty, empty)),
tree (”Люда”,
tree (”Зина”, empty, empty),
tree (”Петя”, empty, empty)))
Ағашты айналып өту
Ағашпен көп қолданылатын амалдарға оларды қандай да бір әдіспен өңдеу немесе барлық түйіндерді зерттеу болып табылады, Бұл прорцедураларды ағашты айналып өту деп атаймыз. Бұның негізгі алгоритмі төмендегідей:
Егер ағаш бос болса, онда ешқандай әрекет жасалмайды.
Әйтпесе, ағымдағы мәнді өңдеп, сонан соң сол жақтағы бұтаққа өту, онан соң оң жақтағы бұтаққа өту.
Ағаштың өзі сияқты, алгоритм де рекуурсивті болып табылады: ол оң және сол жақ бұтақтарды ағымдағы ағаш сияқты өңдейді. Прологта ол екі сөйлем ретінде өрнектеледі: бос үшін біреу, ал екіншісі бос емес үшін.
Айналып өту (empty). /* ештеңе жасамау */ Айналып өту (tree (X, Y, Z)): - X пен бір әрекет жасау,
Айналып өту (X),
Айналып өту (Z).
Бұ лалгоритм алдымен “алдымен түбіне” іздеуіне ұқсас, себебі ол басқа бұтақты айналып өту үшін, шамасы келгенше әрбір бұтақ бойынша төменгі түседі. Алгоритмді іс жүзінде көру үшін, Lab5_1.PRO программасын іске қосыңыз, ол ағашты айналып, жолындағы кез келген элементті баспаға шығарады.
Катя
Миша
Вова
Лида
Люда
Зина
Петя
/* Программа Lab5_1.PRO */
domains
treetype = tree (string, treetype, treetype); empty ()
predicates
print_all_elements (treetype)
clauses
print_all_elements (empty).
print_all_elements (tree (X, Y, Z)):-
write (X), nl,
print_all_elements (Y),
print_all_elements (Z).
goal
print_all_elements (tree (”Катя”,
tree (”Миша”,
tree (”Вова”, empty, empty),
tree (”Лида”, empty, empty)),
tree (”Люда”,
tree (”Зина”, empty, empty),
tree (”Петя”, empty, empty)))),nl,fail;true.
Достарыңызбен бөлісу: |