ЯЗык "Пролог". Понятие базы знаний, определение. Задачи и упражнения, страница 14

формировать_список(1_).

формировать_список(1.):not(eof(readfile)),

readln(X),BHecTM(X,L,L1), формировать_список(1_1). формировать_список(1):-К=1,сорт(КХ1),зап(11).

внести(Х,[],[Х]):-!.

BHecTH(X,L,[X|L]):-!.

BHecTH("",L,L):-!.

/*                Запись строк в файл                     */

1********************************************************1

зап([]).%:-!. зап([Х|1_]):-Х<>"",

write(X),nl,3an(L).

/**.,.♦..*.**..***♦*«**,*****«,*...**«*♦♦****,***.****/

/*               Сортировка (вставками)                 */

/********.****,**.*.****«****«...*,**«*«««*.******,/

predicates

добав(строка,спис_строк,спис_строк)

clauses

copT([X|L],L1 ):-copT(L,L2),flo6aB(X,L2,L1).

сорт([],[]).

добав(Х,[],[Х]).

Ao6aB(X,[Y|L1],(Y|L2]):-X>Y,Ao6aB(X,L1,L2).

Ao6aB(X,[Y|L1],[X,Y|L1]):-X<=Y.

/******..***********************♦**.**,«*«**♦**».*****/

ЛПоказ исходного и отсортированного файлов*/

1********************************************************1

показ(ИмФВх.ИмФВых):-makewindow(1,2,2,"Bbmo",1,1,20,20),

file_str(HM0Bx,Z),display(Z), makewindow(2,2,2,"CTano", 1,23,20,20),

file_str(MMOBbix,ZZ),display(ZZ). 1********************************************************1

6. СПИСКИ 6.1. Представлениесписков

%3адание 1.


%Написать программу для определения:

%1 количества нулей в списке;

%2. максимального элемента в числовом списке;

%3. суммы четных элементов списка;

%4. количества четных элементов списка.

%Вх. параметры:

%   список целых чисел вида [число,число,...]

%Вых. параметры:

%   -количество нулей в списке;

%   -максимальный элемент в списке;

%   -сумма четных элементов списка;

%   -количество четных элементов списка. 1********************************************************1

domains

4HOTo=integer

список=число*

predicates

кол_нулей(список,число) %   -количество нулей в списке;

максимум(список.число) %   -максимальный элемент в списке;

макс(число,число,число) %   -максимум из двух чисел сум_чет(список,число)   %сумма четных элементов списка;

четное(число)         %определение четности числа кол_чет(список,число) %количество четных элементов списка.

clauses

Г*******************************************************/

кол_нулей([],0). кол_нулей([Число|Список],Колич)>

Число=0,кол_нулей(Список,Колич1),

Колич=Колич1+1. кол_нулей([Число|Список],Колич)>

Число<>0,кол_нулей(Список,Колич).

максимум({Число],Число). максимум([Число1,Число2|Хвост],Макс):максимум([Число2]Хвост],Макс1), макс(Число1 ,Макс1 ,Макс). макс(А,В,А):-А>=В,! макс(А,В,В).


сум_чет([],О).

сум_чет([Число|Хвост],СумЧет):-четное(Чиспо),!, сум_чет(Хвост,СумЧет1),СумЧет=СумЧет1+Число;

сум_чет(Хвост,СумЧет).

кол_чет([],0).

кол_чет([Число|Хвост],КолЧет):-четное(Число),!, кол_чет(Хвост,КолЧет1),КолЧет=КолЧет1+1;

кол_чет(Хвост,КолЧет).              >                  **

четное(Число):-Число mod 2 = 0.

/•г***.*»****»***********.******.*********»**.******»*****/

6.2. Операциинадсписками

%1. выделить в отдельный списсж те элементы заданного списка, % которые лежат в интервале от 1 до 5; %2. перевернуть список наоборт (реверс); %3. определить предикат палиндром(Список);

%Вх. параметры:

%   список целых чисел вида [число,число, ..]

%Вых. параметры:

%   -список чисел, входящих в заданный диапазон:

%        выборка([число,число,...],Ответ);

%   -перевернутый (реверсивный) список:

%        реверс([число,число,...],Ответ);

%   -предикат палиндром(Список).

%        па'линдром([число,число,...]),

domains

%4ncno=integer

список=число*

cnoBO=string

спис_слов=слово*

predicates

выборка(список.список)

реверс(список.список)


конкат(список,список, список) лалиндром(список) перевод(список,спис_слов) означает(число,слово) clauses

выборка([],[]). выборка([Число|ХвостВх],[Число(ХвостВых]);Число>1,Число<5, выборка(ХвостВх,ХвостВых). выборка([Число|ХвостВх],ХвостВых):Число<=1, выборка(ХвостВх.ХвостВых). выборка([Число|ХвостВх],ХвостВых)>

Число>=5, выборка(ХвостВх,ХвостВых).

реверс{[],[]) реБерс([Число|ХвостВх],СписВых)>

реверс(ХвостВх,ХвостВых), конкат(ХвостВых,[Число],СписВых). конкат([],Спис,Спис). конкат([Голова|Хвост1],Спис,[Голова|Хвост2])>

конкат(Хвост1 ,Спис,Хвост2).

палиндром(СписВх):реверс(СписВх,СписВых), СписВх=СписВых.

7. СТРУКТУРЫ 7.1. Задачао 8 ферзях

Эта задача состоит в отыскании такой расстановки восьми ферзей на пустой шахматной доске, в которой ни один из ферзей не находится под боем другого.

/..«..«**,****♦,**,***.«*,*♦,.♦*«**.****«„*„**.**.„«„,*♦/

%                          Задача о 8 ферзях

/*************♦***************************************************/

domains