Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Печень О.А / Тема 2 / ЛР 2 1 - Prolog знакомство.doc
Скачиваний:
30
Добавлен:
31.03.2015
Размер:
204.8 Кб
Скачать
  1. Секция domains Пролог-программы

В секции domains объявляются любые нестандартные домены, используемые для аргументов предикатов. Домены в Прологе являются аналогами типов в других языках. Основными стандартными доменами Турбо-Пролога являются:

char - символ, заключенный в одиночные кавычки (например, 'а');

integer - целое от -32768 до 32767 (переводится в вещественное автоматически, если необходимо);

real - вещественное (например, -68.72, бе-94, -791е+21);

string - последовательность символов, заключенных в двойные кавычки (например, "нажмите ввод");

symbol - либо набор латинских букв, цифр и символов подчеркивания, в котором первый символ - прописная буква ( например, n_fax ) ; либо последовательность символов, содержащая пробелы или начинающаяся со строчной буквы, заключенная в кавычки (например, "Список СУБД").

file - символическое имя файла, которое начинается с прописной буквы.

Кроме стандартных доменов пользователь может использовать свои. Для этого в области объявления доменов можно использовать следующие форматы:

а) name = stanDom, где stanDom - один из стандартных доменов: int, char, real, string или symbol, name - одно или несколько имен доменов. Например, fio = symbol или year, height = integer ;

б) mylist = elementDom*, где mylist - область, состоящая из списков элементов из области elementDom, которая может быть определена пользователем или иметь стандартный тип.Например, numberh5t = integer* или letter = char* ;

в) myCompDom = functor1(d11,…,d1n) ; functor2(d21,..., d2n) ; ... functorm(dm1,...,dmq) , где myCompDom - область, которая состоит из составных объектов, описываемых указанием функтора и областей для всех компонентов. Правая часть такого описания может определять несколько альтернатив, разделенных ";" или "or". Каждая альтернатива должна содержать единственный Функтор functor, и описание типов для компонентов dij. Например,

auto = car(symbol,integer) , packing = box(integer, integer, integer) ; bottle(integer)

описывает две области auto и packing. Область auto соответствует двухкомпонентной структуре с функтором car, а область packing соответствует одной из двух возможных структур box и bottle, которые различаются не только именами, но и количеством компонент.

г) file = name1; name2 ; ... namen используется, когда пользователю необходимо ссылаться на файлы по их символическим именам.

Пример. Требуется разработать структуру данных для хранения информации о компьютерах. При этом каждый компьютер будет рассматриваться как набор входящих в него устройств, среди которых могут быть: процессоры с указанием их наименования и частоты, НЖМД с указанием их объема и фирмы изготовителя, также мониторы определенного типа. Область определения доменов для этого примера будет иметь вид

domains

name , firm , type = symbol freq , vol = integer device = processor(name,freq);disk(firm,vol);monitor(type) computer = device*

В этом описании домен computer является списком элементов типа device, то есть каждый элемент этого списка может иметь структуру типа либо processor, либо disk, либо monitor, содержащих одну или две компоненты, каждая из которых имеет стандартный символьный ют целый тип.