57
курс (олег,5). факультет (олег, філфак). група (олег, 52).
курс (хома,1). факультет (хома, філфак). група (хома,15).
студент (Имя, Курс, Факультет, Група) :- /*(1)*/
курс (Имя, Курс),
факультет (Имя, Факультет),
група (Имя, Група).
Êîìåíòàð. Ó ðîë³ êëþ÷à ïðîãðàìà âèêîðèñòîâóº àòðèáóò имя. Êîæåí çàïèñ
áàçè äàíèõ ïîäàíî ó âèãëÿä³ íàáîðó ³ç òðüîõ ôàêò³â-â³äíîøåíü
ì³æ ïåâíèì ³ìåíåì ñòóäåíòà òà òèì, íà ÿêîìó êóðñ³, ôàêóëüòåò³, ó
ÿê³é ãðóï³ â³í íàâ÷àºòüñÿ. Ïðàâèëî (1), ÿêå ðåàë³çóº ïðåäèêàò сту-
дент/4, îá'ºäíóº âñ³ àòðèáóòè äåÿêîãî ñòóäåíòà ó çàïèñ áàçè äàíèõ.
Õî÷à ïðîãðàìà çíà÷íî á³ëüøà çà îáñÿãîì, í³æ ïîïåðåäíÿ, àëå òà-
êèé ñïîñ³á ïîäàííÿ áàç äàíèõ á³ëüø ãíó÷êèé: íîâ³ àòðèáóòè ìîæ-
íà äîáàâëÿòè äî îêðåìèõ åëåìåíò³â, íå çì³íþþ÷è âñþ áàçó äàíèõ.
Приклад 21. Ïîäàííÿ áàçè äàíèõ ó âèãëÿä³ ñïèñêó ñòðóêòóð.
domains /*pr_21. pro*/
имя, факультет = symbol
курс, група = integer
структура_студент = ст (имя, курс, факультет, група)
список_ст = структура_студент*
predicates
студенти (список_ст)
запис (структура_студент)
member (список_ст, структура_студент)
clauses
студенти ( [ ст(ярема,1,фізмат,13),
ст(олег,5,філфак,52),
ст(хома,1,філфак,15) ] ).
запис(L) :-
студенти(C), member (C, L).
member ( [H | T], H).
member ( [H | T], Y) :-
member (T, Y).
Êîìåíòàð. Àðãóìåíò список_ст ÿê ñïèñîê ñêëàäàºòüñÿ ç³ ñòðóêòóð òèïó ст/4.
Ïðåäèêàò студенти/1 äîçâîëÿº çàïèñàòè â³äïîâ³äí³ ôàêòè ó âèãëÿä³
ñïèñêó ñòðóêòóð. Ïðàâèëî запис/1 óñï³øíî âèêîíóºòüñÿ, ÿêùî éîãî
àðãóìåíò L ì³ñòèòüñÿ ÿê åëåìåíò (ïðîöåäóðà memeber/1) äàíîãî ñïèñ-
êó ñòóäåíò³â; ïðè öüîìó ñïèñîê ñòóäåíò³â îäåðæóºòüñÿ ³ ïåðåäàºòüñÿ
çì³íí³é С ï³ñëÿ óñï³øíîãî ïîãîäæåííÿ ïðåäèêàòó студенти/1. Âèêî-
íóþ÷è çàïèòè ç ï³äö³ëëþ запис/1 ìîæíà îòðèìàòè ð³çíîìàí³òíó ³í-
ôîðìàö³þ íà îñíîâ³ çàïèñàíî¿ áàçè äàíèõ. Ïåðåâàãîþ äàíîãî ï³äõî-
äó º ìîæëèâ³ñòü âèêîðèñòàííÿ ïðîöåäóð äëÿ ðîáîòè ç³ ñïèñêàìè.
Êð³ì òîãî, áàçè äàíèõ íà Ïðîëîç³ ìîæóòü ïîäàâàòèñÿ ó âèãëÿä³
ðåêóðñèâíî¿ ñòðóêòóðè, á³íàðíîãî äåðåâà òîùî.