Представление данных часто требует наличия большого числа структур, и все они должны быть описаны. Чтобы один и тот же предикат мог работать с объектами разных типов, Турбо-Пролог предлагает альтернативные описания доменов. Программа 3.2 «Предметы» использует эти альтернативные описания:
/* Программа 3.2 «Коллекция». Назначение: */
/* демонстрация использования конструкций */
/* альтернативных доменов. */
domains
thing = book(author,title) ;
record(artist,album,type)
name, author, title, artist, album = symbol
predicates
owns(name, thing)
clauses
owns("Bill", book("J.R.R. Tolkein", "Return of the Ring")).
owns("Bill", record("Elton John", "Ice Fair")).
/* Конец программы */
Для разделения альтернативных доменов здесь применена точка с запятой (;). Использование альтернативных доменов позволяет писать в утверждениях предикат owns применительно к различным классам вещей. В отсутствие этой конструкции требовалось бы ввести два разных предиката owns.
Упражнение 3.1.
Сформулируйте сокращенные внутренние запросы
1) перечислить названия всех книг;
show_books :-
2) перечислить все записии и их владельцев;
show_records :-
3) перечислить все предметы коллекции одного владельца, используя только предикат owns.