Сборник задач по курсу «Логическое программирование»: Учебное пособие, страница 18

Выводит целое число в файл с дескриптором Handle в 16-битном формате.

write_int32(+Handle,+Integer)

Выводит целое число в файл с дескриптором Handle в 32-х битном формате.

write_key(+Key,+File,+Backup)

Записывает ключ базы данных в ASCII-файл и если Backup равен 1 и имеется существующая версия файла File, то она сохраняется в виде .BAK файла.

writeq(+Term)

writeq(+Handle,+Term)

Выводит терм на стандартное устройство вывода или в файл с указанным дескриптором, заключая атомы и функторы в кавычки так, чтобы терм читался далее как синтаксически корректный терм Пролога.


 Приложение В

Вспомогательные материалы

Графические файлы формата PPM (Portable PixMap)

Файл формата PPM имеет простую структуру. Первая строка файла всегда содержит «магическое число» P6. Во второй строке содержится размер картинки по горизонтали и вертикали в пикселях (целые числа в текстовом формате). Третья строка практически всегда содержит число 255. Начиная с четвертой строки в файле, кодируется цвет каждого пикселя. Под кодировку цвета отводится три байта (R-, G- и B-байты). Рассмотрим пример (кодировка DOS):

P6 3 4 255 я++я++я++я++я++я++я++я++я++я++я++я++

Это изображение представляет собой небольшой ярко красный прямоугольник размером 3 на 4 пикселя. Все пиксели одного цвета  – «я++» ({239,43,43} – интенсивности красной, зеленой и синей компонент цвета в цифровом выражении). Первые три строки файла заканчиваются символами конца строки (ASCII-код 10), а не парой «возврат каретки, конец строки», как это принято на платформе Windows. Для создания файла из описанного примера в среде интерпретатора Пролога можно, например, воспользоваться следующим кодом:

make_test_ppm:-

  create(H,’test.ppm’),

  concat([’P6’,10,’3 4’,10,’255’,10], S),

  write(H, S),

  write(H,’я++я++я++я++я++я++я++я++я++я++я++я++’),

  close(H).

Кроссворды

Используя возможности языка Пролог по организации полного перебора, несложно реализовать программу для составления кроссвордов. Для организации работы этой программы требуется база данных существительных и удобный шаблон для заполнения. Шаблонов может быть столько, сколько требуется различных по форме кроссвордов.

В качестве удобного способа организации простейшей тестовой базы может служить следующий код, записывающий в радел базы данных существительные русского языка в виде списков из ASCII-кодов:

:- eraseall(verb).

:- recordz(verb,”казак”,_).

:- recordz(verb,”роман”,_).

:- recordz(verb,”бокал”,_).

:- recordz(verb,”короб”,_).

:- recordz(verb,”замок”,_).

:- recordz(verb,”канал”,_).

:- recordz(verb,”комок”,_).

:- recordz(verb,”кокон”,_).

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

A

B

C

D

E

P

R

T

F

G

H

I

J

Q

S

U

K

L

M

N

O

Рис. 1. Простейший пример кроссворда

Для представления такого шаблона можно воспользоваться множеством различных вариантов. В качестве одного из возможных решений можно использовать такой код:

form(

  [A,B,C,D,E]*[F,G,H,I,J]*[K,L,M,N,O]+

  [A,P,F,Q,K]*[C,R,H,S,M]*[E,T,J,U,O]).

Разумеется, арифметические операции здесь не играют своей привычной роли, а лишь служат для сцепления шаблонов для слов, при этом «+» использован для указания перехода к описанию шаблонов расположенных вертикально.

Матрица инцидентности графа

Для графа G = (X,R), где X – множество вершин, а R – множество ребер, матрица инцидентности – это прямоугольная матрица M={mij}. mij = 1 тогда и только тогда, когда вершина xi инцидентна ребру rj и mij = 0 в противном случае. Пример простейшего графа и его матрицы представлен на рис. 2.