Файлы и разделы базы данных

98. Если нумеровать потомков каждого узла дерева слева направо, то можно для каждого узла составить его описание (см. при-мер). В разделе БД хранится терм представленный в виде совокупности описаний узлов. Преобразовать описание в структуру Пролога.

Аргументы: имя раздела БД (имя структуры);
структура.

?- recorded(tst,X,_).
X = 1:f -> ;
X = 1:1:a -> ;
X = 1:1:1:m -> ;
X = 1:1:2:k -> ;
X = 1:1:2:1:v -> ;
X = 1:2:r -> ;
X = 2:n -> ;
X = 2:1:i -> ;
X = 2:1:1:d -> ;
X = 2:1:2:e -> ;
X = 2:1:3:z -> ;
X = 3:o -> ;
no
?- pred(tst,X).
X = tst(f(a(m,k(v)),r),n(i(d,e,z)),o)
yes
?-

99. Растровое изображение хранится в дисковом файле формата PPM (см. приложение В). Построить зеркальное отражение исходного изображения. Результат сохранить в новом файле.

Аргументы: имя исходного файла;
имя нового файла.

?- pred(’sample.ppm’,’new.ppm’).
yes
?-

 

100. В разделе БД хранится терм в графическом представлении. Преобразовать его в структуру Пролога. Символы псевдографики см. в приложении В.

Аргументы: имя раздела БД;
структура.

?- recorded(test,X,_).
X = a -> ;
X = ├─f -> ;
X = │ ├─a -> ;
X = │ │ ├─m -> ;
X = │ │ └─k -> ;
X = │ │ └─v -> ;
X = │ └─r -> ;
X = ├─n -> ;
X = │ └─i -> ;
X = │ ├─d -> ;
X = │ ├─e -> ;
X = │ └─z -> ;
X = └─o -> ;
no
?- pred(test,X).
X = a(f(a(m,k(v)),r),n(i(d,e,z)),o)
yes
?-

101. Растровое изображение, хранится в дисковом файле формата PPM (см. приложение В). Преобразовать исходное цветное изображение в черно-белое (в градациях серого). Результат сохранить в новом файле. Для пересчета цветовых координат пикселя (R, G, B) к яркости можно воспользоваться формулой L = 0.3R + 0.59G + 0.11B.

Аргументы: имя исходного файла;
имя нового файла.

?- pred(’sample.ppm’,’new.ppm’).
yes
?-

 

102. В разделе БД хранится текст на русском языке. Каждый терм, хранящийся в разделе, представляет собой предложение на русском языке. Осуществить форматирование текста, переписав его в новый раздел БД. Форматирование производится путем разбиения всего текста на строки длиной, не превышающей заданную ширину страницы (переносы расставляютя по правилам русского языка).

Аргументы: имя раздела БД с исходным текстом;
ширина страницы (в знаках);
имя раздела БД с отформатированным текстом.

?- recorded(test1,X,_).
X = Впрочем, был еще и повод. -> ;
X = Возможно, главный. -> ;
X = Его сложно объяснить в двух словах, мимоходом. -> ;
X = И чем ближе к концу моего рассказа, тем сложнее. -> ;
no
?- pred(test1,46,test2).
yes
?- recorded(test2,X,_).
X = Впрочем, был еще и повод. Возможно, главный. -> ;
X = Его сложно объяснить в двух словах, мимоходом. -> ;
X = И чем ближе к концу моего рассказа, тем слож- -> ;
X = нее. -> ;
no
?-

103. В раздел БД загрузить текст программы на языке Паскаль и удалить из него комментарии.

Аргументы: имя файла с исходной программой;
имя раздела БД.

?- pred(’first.pas’,test1).
yes
?-

 

104. В двух разделах БД хранятся произвольные термы. Переписать в третий раздел только те термы, которые содержатся в первом разделе, но не содержатся во втором.

Аргументы: имя первого раздела БД;
имя второго раздела БД;
имя третьего раздела БД.

?- recorded(test1,X,_).
X = a -> ;
X = v -> ;
X = t -> ;
X = 7 -> ;
no
?- recorded(test2,X,_).
X = 4 -> ;
X = 6 -> ;
X = a -> ;
X = x -> ;
no
?- pred(test1,test2, test3).
yes
?- recorded(test3,X,_).
X = v -> ;
X = t -> ;
X = 7 -> ;
no
?-

105. Растровое изображение хранится в дисковом файле формата PPM (см. приложение В). Подсчитать количество цветов, используемых в данном изображении.

Аргументы: имя файла;
количество цветов.

?- pred(’sample.ppm’,X).
X = 27 -> ;
yes
?-

106. В разделе БД содержатся существительные русского языка. Заполнить заданный шаблон (подобие кроссворда, см. приложение В) этими существительными так, что бы каждое слово было использовано всего один раз.

Аргументы: имя раздела БД (словарь);
имя факта (задает шаблон);
список слов (заполняют шаблон).

?- pred(verb,form,X).
X = казак*роман*бокал+короб*замок*канал -> ;

yes
?-

107. В разделе БД хранится шаблон кроссворда (см. пример и приложение В). Преобразовать шаблон к виду, пригодному для использования в задаче составления кроссворда.

Аргументы: имя раздела БД;
шаблон (список).

?- recorded(test1,X,_).
X = xxxxx -> ;
X = x x x -> ;
X = xxxxx -> ;
X = x x x -> ;
X = xxxxx -> ;
no
?- pred(test1,X).
X = [_1,_2,_3,_4,_5]*[_6,_7,_8,_9,_A]*[_B,_C,_D,_E,_F]+
[_1,_11,_9,_12,_5]*[_3,_13,_8,_14,_D]*[_5,_15,_A,_16,_F]
yes
?-

108. В разделе БД содержатся числа. Найти все различные совокупности чисел (как по количеству элементов, так и по составу) такие, что сумма чисел совокупности не превышает заданного числа.

Аргументы: имя раздела БД (множество чисел);
ограничение на сумму (число);
список ссылочных номеров допустимого подмножества.

?- recorded(test1,X,R).
X = 3
R = ~402F0A -> ;
X = 2
R = ~402F32 -> ;
X = 5
R = ~402F5E -> ;
X = 7
R = ~402F20 -> ;
X = 2
R = ~402F14 -> ;
no
?- pred(test1,5,X).
X = [~402F0A]-> ;
X = [~402F32]-> ;
X = [~402F5E]-> ;
X = [~402F14]-> ;
X = [~402F0A,~402F32]-> ;
X = [~402F0A,~402F14]-> ;
X = [~402F32,~402F14]-> ;
no
?-

109. Растровое изображение хранится в дисковом файле формата PPM (см. приложение В). Произвести земену цвета, указанного во втором аргументе, на цвет, указанный в третьем аргументе. Результат сохранить в новом файле.

Аргументы: имя исходного файла;
заменямый цвет; новый цвет
имя нового файла.

?- pred(’sample.ppm’,(32,120,200),(0,0,0),’new.ppm’).
yes
?-

 

110. Дана матрица инцидентности графа (см. приложение В). Сформировать раздел БД так, чтобы каждой вершине графа соответствовал свой терм БД, являющийся списком ссылочных номеров термов, соответствующих тем вершинам графа, которые инцидентны данной вершине графа. Для примера диалога в среде интерпретатора использованы граф и матрица инцидентности из приложения В.

Аргументы: матрица инцидентности;
имя раздела БД.

?- pred([[1,0,0,1],[1,1,0,0],[0,1,1,0],[0,0,1,1]],m).
yes
?- recorded(m,X,R).
X = [~402F0A,~402F32]
R = ~402F14 -> ;
X = [~402F14,~402F5E]
R = ~402F0A -> ;
X = [~402F0A,~402F32]
R = ~402F5E -> ;
X = [~402F14,~402F5E]
R = ~402F32 -> ;
no
?-

 

 


ЛИТЕРАТУРА

1. Братко И. Алгоритмы искусственного интеллекта на языке PROLOG. 3-е изд. / Пер. с англ. – М.: Издательский дом «Вильямс», 2004. – 640 с.

2. Братко И. Программирование на языке Пролог для искусственного интеллекта. / Пер. с англ. – М.: Мир, 1990. – 560 с.

3. Шрайнер П.А. Основы программирования на языке Пролог: курс лекций: учебное пособие – М.: Интернет-университет информационных технологий, 2005. – 176 с.

4. Малпас Дж. Реляционный язык Пролог и его применение. / Пер. с англ. / Под ред. В.Н. Соболева. – М.: Наука, 1990. – 464 с.

5. Метакидес Г., Нероуд А. Принципы логики и логическое программирование. / Пер. с англ. под ред. к.ф.м.н В.А. Захарова и акад. В.А. Садовничего. – М.: Изд-во «Факториал», 1998. – 288 с.

6. Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог. / Пер. с англ. – М.: Мир, 1990. – 235 с.

7. Стобо Д.Ж. Язык программирования Пролог. / Пер. с англ. – М.: Радио и связь, 1993. – 368 с.

8. Хоггер К. Введение в логическое программирование. / Пер. с англ. – М.: Мир, 1988. – 348 с.

9. The Arity/Prolog compiler and interpreter. Version 6.1. Arity Corporation Damonmill Square Concord, Massachusetts 01742, 1992, Arity Corporation. – 444 с.

 


Приложение А