Пәндердің оқу-әдістемелік кешенінің тізімдемесі



бет61/85
Дата11.10.2023
өлшемі2.35 Mb.
#480347
1   ...   57   58   59   60   61   62   63   64   ...   85
Сараптаушы жүйелер

Зертханалық жұмыс №11


Тақырыбы: Òóðáî-Ïðîëîã æ¾éåñiíäå öèêëäàðäû ½éûìäàñòûðó. Øåêñiç öèêë -fail ïðåäèêàòû. Ðåêóðñèÿ. Øåêñiç öèêë -ºîëäàíó ïðåäèêàòû.
Жұмыстың мақсаты: Òóðáî-Ïðîëîã æ¾éåñiíäå öèêëäàðìåí áåðiëãåíäåð ºîðûí º½ðó. Ðåêóðñèÿíû ºîëäàíóäû ¾éðåíó.


Òåîðèÿëûº á¼ëiì
Øåêñiç öèêë - fail ïðåäèêàòû Òóðáî Ïðîëîã æ¾éåñiíäå "øåêñiç öèêë" ðåæèìií ½éûìäàñòûðóäà fail ñòàíäàðòòû ïðåäèêàòûí ºîëäàíó àðºûëû, áåðiëãåíäåð áàçàñûíû» ä½ðûñ øåøiìií àëó¹à áîëàäû.
Ìûñàëû, êåéáið åëäåðäi» àòòàðû áåðiëñií. Áåðiëãåíäåð áàçàñûíäà ºàíäàé áîëûï ñàºòàëñà äà, îëàðäû ñîë ìåçåòòå øû¹àðó ºàæåò áîëñûí. Ò¼ìåíäå îñû åñåïòi òóðáî ïðîëîã æ¾éåñiíäå øû¹àðó âàðèàíòû ê¼ðñåòiëåäi.
/* Turbo Prolog 2.0, áàðëûº íàºòû øåøiìäåðäi ñûðòºû ìàºñàòòà äà æ¸íå iøêi ìàºñàòòà äà fail ïðåäèêàòûí ºîëäàíó àðºûëû øû¹àðóäû ½éûìäàñòûðó. */
predicates
страна(symbol)
печать_стран
clauses
страна(англия).
страна(россия).
страна(германия).
страна(дания).
печать_стран :- страна(X),
% Õ ì¸íií øû¹àðàòûí ñòàíäàðòòû ïðåäèêàò
write(X),
nl, %æà»à ºàòàð¹à ¼òó
fail. % ºàéòàðóäû áàñºàðó
goal
ïå÷àòü_ñòðàí.
͸òèæåñiíäå åëäåð àòû áið áà¹àí¹à øû¹àðûëàäû. Åãåð äå ïðîãðàììàäàí "goal" ñ¼çií àëûï òàñòàñàº, ºàáûëäàí¹àí øåøiìäåðäi äèàëîãòiê ðåæèìãå æàçñຠòà í¸òèæåñi ¼çãåðìåéäi.
Ðåêóðñèÿ Öèêëäàðäû ½éûìäàñòûðóäû» áàñºà ò¸ñiëi áîëûï, ¼çiíi» ïðåäèêàòòàðûí øàºûðàòûí ðåêóðñèÿ òàáûëàäû. Á½ë, Òóðáî ïðîëîã ïðîãðàììàñûíû» ºóàòòû º½ðàëû.
/* Turbo Prolog 2.0, ºàðàïàéûì ðåêóðñèÿíû ºîëäàíó àðºûëû ôàêòîðèàëäû åñåïòåó. */

trace /* этот стандартный предикат поможет Вам понять логику ТП*/


predicates
/* Значение факториала считается вещественным,
чтобы избежать ПЕРЕПОЛНЕНИЯ */
factorial(integer, real)
clauses
/*åãåð N=1 áîëñà, îíäà ôàêòîðèàë ìàíi 1-ãå òåí */
factorial(1, 1) :- !. % ðåêóðñèÿíû òîêòàòó øàðòû
/* Во всех других случаях надо найти факториал N-1, а затем умножить его на N */
factorial(N, FactN) :-
/* Внимание!!! Оператора ПРИСВАИВАНИЯ нет!!!
Происходит связывание переменных N и NN */ NN = N-1,
/* рекурсивный вызов factorial c НОВЫМИ параметрами */
factorial(NN, FactNN),
FactN = N*FactNN.
Åãåð äèàëîãòiê ðåæèìãå ñ½ðàíûñ áåðñåê
Goal: factorial(3,F),
îíäà ÒÐÀÑÑÈÐÎÂÊÀ ðåæèìiíäå F=6 øåøiìi àëûíàäû. Á½ë âàðèàíò æàäû¹à òèiìñiç, ¼éòêåíi áàðëûº àéíûìàëûëàð ¾øií Ôðåéìå Ñòåê äåï àòàëàòûí ðåêóðñèÿíû» ¸ðáið ºàäàìûíäà N ì¸íií åñåïòåéòií ¾ëêåí îðûí ºàæåò åòåäi. ̽íäàéäû áîëäûðìàñ ¾øií, Õâîñòîâàÿ ðåêóðñèÿñû ºîëäàíûëàäû. Îë êåëåñi ò¾ðäå ½éûìäàñòûðûëàäû:
-ðåêóðñèâòiê øàºûðó ñû ìàºñàò áîëó ºàæåò;
-ºàéòàðó í¾êòåñií áîëäûðìàñ ¾øií ºèûï àëó ïðåäèêàòû (!) ê¼ìåãiìåí ì¾ìêií áîëàòûí àëüòåðíàòèâòi øåøiìäåðäi åñêåðó ºàæåò.

/* Turbo Prolog 2.0, Õâîñòîâîé ðåêóðñèÿíû ºîëäàíó àðºûëû ôàêòîðèàëäû åñåïòåó. */


predicates
factorial(integer,real)
factorial(integer, real, integer, real)
clauses
factorial(N,FactN):-
factorial(N,FactN,1,1). % установка начальных значений
factorial(N, FactN, N, FactN):- !. % условие останова
factorial(N, FactN, I, P):-
NewI = I+1,
NewP = P*NewI,
factorial(N, FactN, NewI, NewP).


Øåêñiç öèêë - ºîëäàíó ïðåäèêàòû. Ïðîãðàììàäà áåëãiëåíãåí îðûí¹à äåéií øåêñiç ºàéòàðóäû èíèöèàëèçàöèÿ ¾øií Òóðáî Ïðîëîã æ¾éåñiíäå "backtracking" ("içäåóäi ºàéòàðó") ìåõàíèçìií ºîëäàíó¹à áîëàäû. Îë ¾øií êåéáið ïðåäèêàòòàðäû êåëåñi ò¾ðäå æàçó¹à áîëàäû:
ïîâòîðèòü. % á½ë - ôàêò.
ïîâòîðèòü:-ïîâòîðèòü. % àë á½ë åðåæå
Êåç-êåëãåí ñèìâîëäû ïåðíåòàºòàäàí åíãiçóãå áîëàòûí ïðîãðàììà º½ðûë¹àí. Á½ë ïðîãðàììà "Enter" ïåðíåñií áàñºàíøà æ¾ðå áåðåäi.
/* Turbo Prolog 2.0 , пример 6 */
predicates
repeat % предикат пользователя для повтоpения
читай_пиши
clauses
repeat.
repeat :- repeat.
читай_пиши :-
repeat,
readchar(C), % стандартный предикат ввода символа С
write(C), % стандартный предикат вывода символа С
char_int(C,13)./* стандартный предикат сравнения сим­вола С с кодом клавиши ENTER - 13 */
goal
читай_пиши.


Достарыңызбен бөлісу:
1   ...   57   58   59   60   61   62   63   64   ...   85




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет