58
collection(kahn, book("The Computer and the Brain",
"von Neumann", "Yale University Press",1958)).
collection(kahn, book("Symbolic Logic", "Lewis Carroll",
"Dower Publications",1958)).
collection(johnson, book("Database: A Primer", "C.J.Date",
"Addison-Wesley",1983)).
collection(johnson, book("Problem-Solving Methods in AI",
"Nils Nilsson", "McGraw Hill",1971)).
collection(smith, book("Alice in Wonderland",
"Lewis Carroll", "The New American Library",1960)).
collection(smith, book("Fables of Aesop", "Aesop-Calder",
"Dover Publications",1967)).
/***** конец программы *****/
_____________________________________________________________
Функтор структуры personal_library имеет имя book. Описание таково:
personal_library = book(title, author ,publisher, year)
collector, title, author, publisher = symbol
year = integer
Предикат, использующий эту структуру, определяется так:
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. Подчерки-
вание (_) указывает на то, что Вас не интересуют объекты с родовыми