Книга(613456678, автор(”Братко”, ” Иван”), название(”Программирование на языке Пролог”), издательство(”Москва”,”Вильямс”), год_издания(2004)).

Структура записывается на Прологе с помощью функтора (имени структуры) и компонентов.

<функтор-имя структуры>(<список аргументов - компонентов>).

Компоненты (их не более 255) заключаются в круглые скобки и разделяются запятыми. Функтор (functor – имя структуры) записывается перед открывающейся круглой скобкой и задается символическим именем. Компонентами могут быть любые термы: константы, переменные, структуры.

Две структуры равны, если они имеют один и тот же функтор и одинаковое число аргументов, причем все соответствующие аргументы равны.

Структуры могут быть вложены одна в другую на любую глубину.

Пример. Использовать структуру для хранения сведений о человеке в виде:

личность=личность(фио,адрес),

где фио=фио(фамилия, имя, отчество);

адрес=адрес(город, улица, дом, квартира)

 

Domains

person=person(fio,adres)

fio=fio(fam,name,ot)

adres=adres(city, street, house, flat)

fam, name, ot, city, street=sting

house, flat=integer

Predicates

p

Clauses

p :- P1=person(fio(”Петров”, ”Петр”, ”Петрович”),

Adres(”Москва”, ”Покровка”,10,4)),

P1=person(fio(”Петров”, _, _), Address),

Р2=person(fio(”Мохов”, ”Андрей”, ”Иванович ”), Address),

write(”P1=”, P1),nl, write(”P2=”,P2),nl.

GOAL

p.

Результат:

P1=person(fio(”Петров”, ”Петр”, ”Петрович”), адрес(”Москва”, ” Покровка”,10,4)),

Р2=person(fio(”Мохов”, ”Андрей”, ”Иванович ”), адрес(”Москва”, ” Покровка”,10,4))

Solution

Достоинством структуры является возможность обрабатывать несколько единиц данных как одно целое.

 

 

Файлы

Обычно файлом называют именованную (то есть имеющую имя) совокупность данных, записанных на диске. Файл состоит из компонентов (элементов). При чтении или записи файловая переменная перемещается к очередному компоненту и делает его доступным для обработки.

Пользовательские файлы описываются в разделе domains следующим образом:

file = <символическое имя файла1>;...;<символическое имя файлаN>

При описании файловых доменов тип домена file располагается слева от равенства, а символические имена файлов — справа. Их еще называют внутренними или логическими именами файлов, в отличие от внешних или физических имен файлов. Символическое имя файла должно начинаться со строчной буквы. По умолчанию стандартным устройством ввода является клавиатура, а стандартным устройством вывода — монитор. Чтобы начать работу с пользовательским файлом, его нужно открыть, а по завершении работы закрыть.

 

Встроенные предикаты для работы с файлами:

openread(SymbolicFileName,DosFileName) (file,string) - (i,i) Открывает файл для чтения
openwrite(SymbolicFileName,DosFileName) (file,string) - (i,i) Открывает файл для записи.
openappend(SymbolicFileName,DosFileName) (file,string) - (i,i) Открывает файл для дополнения.
openmodify(SymbolicFileName,DosFileName) (file,string) - (i,i) Открывает файл для чтения/записи
readdevice(SymbolicFileName) (file) - (i) (o) Присваивает текущему устройству ввода заданное символическое имя файла или считывает заданное символическое имя файла.
writedevice(SymbolicFileName) (file) - (i) (o) Присваивает текущему устройству вывода заданное символическое имя файла или считывает заданное символическое имя файла.
filemode(SymbolicFileName,FileMode) (file,Integer) - (i,i) (i,o) Устанавливает/опрашивает тип заданного файла. FileMode = 0 - текстовый файл, 1 - двоичный файл.
closefile(SymbolicFileName) (file) - (i) Закрывает данный файл.
filepos(SymbolicFileName,FilePosition,Mode) (file,real,integer) – (i,i,i) (i,o,i Устанавливает указатель данного файла на заданную позицию или считывает текущую позицию. Mode = 0 - относительно начала файла, 1 - относительно текущей позиции, 2 - относительно конца файла.
eof(SymbolicFileName) (file) - (i) Проверка на конец файла. Выполняется успешно, если указатель текущей позиции файла указывает на конец файла, и завершается неудачно в противном случае.
existfile(DosFileName) (string) - (i) Проверяет, существует ли заданный файл в текущем каталоге.
deletefile(DosFileName) (string) - (i) Удаляет заданный файл DOS.
renamefile(OldDosFileName,NewDosFileName) (string,string) – (i,i) Переименовывает файл DOS. OldDosFileName - старое имя, NewDosFileName - новое имя файла
disk(DosPath) (string) - (i) (o) Устанавливает или показывает накопитель и путь.
file_str(SymbolicFileName,string) – (i,o )(o,i) Целиком читает символы файла в строку или, наоборот, записывает содержимое строки в файл

- SymbolicFileName - логическое имя файла, определяемое в domains

как относящееся к типу file;

- DosFileName - имя файла в MS DOS.

 

Пример.