Collection(collector,personal_library)




Описание содержит два имени объектов. Первое имя относится к обычному объекту, второе - к структуре из нескольких объектов.

Использование доменной структуры упрощает структуру предиката. Если не использовать конструкцию доменной структуры, то программы требовала бы такого описания предиката collection:

 

Collection(collector,title,author,publisher,year)

 

В этом описании 4 последних объекта обозначают атрибуты книги. Правило, которое оперирует с персональными библиотеками рассматривало бы эти 4 последних объекта как независимые сущности, что сделало бы код программы более сложным.

Данная программа использует внешнюю цель. Для того, чтобы узнать, какие книги принадлежат Смиту, необходимо ввести такое целевое утверждение:

 

Collection(smith,Books).

 

Объект smith является частным значением из домена collector, а Books - свободной переменной. Цель заключается в отыскании всех книг, принадлежащих Смиту.

Предположим теперь, что Вы хотите знать имена владельцев и названия книг, напечатанных в 1967 году. Цель для поиска этой информации выглядит следующим образом:

 

Collection(Collector,book(Title,_,_,1967)).

 

Здесь свободными переменными являются уже Сollector и Title. Подчерки (_) указывают на то, что Вас не интересуют

объекты с родовыми именами author и publisher.

 

 

Использование альтернативных доменов.

 

Представление данных часто требует наличия большого числа структур. В Прологе эти структуры должны быть описаны. Более того, возникают трудности с предикатами, работающими с объектами этих доменов. Для устранения данного недостатка Пролог предлагает пользователю альтернативные описания доменов. Программа "Предметы" (листинг 2) как раз и использует эти альтернативные описания:

 

Листинг 2.

 

 

domains

 

thing = misc_thing(whatever);

book(author,title);

record(artist,album,type)

 

person,

whatever,

author, title,

artist,album,type = symbol

 

predicates

 

owns(person,thing)

 

clauses

 

/* факты */

 

/* Разнообразные вещи */

 

owns("Bill",

misc_thing("sail boat")).

owns("Bill",

misc_thing("sports car")).

owns("Jack",

misc_thing("Motor cycle")).

owns("Jack",

misc_thing("house trailer")).

owns("Beth",

misc_thing("Chevy wagon")).

owns("Beth",

misc_thing("Piano")).

owns("Linda",

misc_thing("motor boat")).

 

/* книги */

 

owns("Bill",

book("J.R.R. Tolkein",

"Return of the Ring")).

owns("Bill",

book("James A. Mishener",

"Space")).

owns("Jack",

book("Manuel Puig",

"Kiss of the Spider Woman")).

owns("Beth",

book("Frank Herbert",

"Dune")).

owns("Beth",

book("Tom Clancy",

"The Hunt for Red October")).

owns("Linda",

book("Garrison Keillor",

"Lake Wobegon Days")).

 

/* грампластинки */

 

owns("Bill",

record("Elton John",

"Ice Fair",

"popular")).

owns("Bill",

record("Michael Jackson - Lionel Richie",

"We are the World",

"popular")).

owns("Jack",

record("Bruce Springsteen",

"Born to Run",

"popular")).

owns("Jack",

record("Benny Goodman",

"The King of Swing",

"jazz")).

owns("Beth",

record("Madonna",

"Madonna",

"popular")).

 

/***** конец программы *****/

 

Приведенный ниже фрагмент показывает, как выглядела бы программа, если бы Турбо-Пролог не поддерживал конструкций альтернативных описаний доменов.

 

domains

 

person,whatever,author,title = symbol

artist,album,type = symbol

misc_thing = misc_thing(whatever)

book_library = book(author,title)

record_library = record(artist,album,type)

 

predicates

 

personal_thing(person,misc_thing)

personal_books(person,book_library)

personal_records(person,record_library)

 

clauses

 

personal_thing("Bill",misc_thing("sail boat")).

personal_books("Bill",book("J.R.R. Tolkein",

"Return of the Ring")).

personal_records("Bill",record("Elton John",

"Ice of Fire","popular")).

 

Программа "Предметы" использует 3 доменные структуры. Первой из них является misc_thing, единственный объект которой назван whatever. Bторая структура имеет имя book; ее объекты - это author и title. Третьей структурой является record; она скомпонована из трех объектов: artist, album и type.

Объекты всех трех структур относятся к типу symbol. Все

три объединены под именем thing. Описанием этого домена является

 

thing = misc_thing(whatever);

book(author,title);



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: