/* GoogleAds */

Главная

ПРОЕКТ "ЧЕЛОВЕК. ЗЕМЛЯ. ВСЕЛЕННАЯ"

Инструменты пользователя

Инструменты сайта


project:prolog:listing:biblioteka



Программа "Библиотека"

Программа «Библиотека» демонстрирует одноуровневый составной объект (доменную структуру).

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

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

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

domains
 
 /* персональная библиотека = книга(название, автор, издательство, год издания) */
 /* это составной объект */
 /* Функтор структуры personal_library имеет имя book 
 имя домена - personal_library
 имя структуры - book.
 Структура содержит четыре объекта: title, author, publisher и year.*/
 personal_library = book(title,author,publisher,year)
 
 collector,title,author,publisher = symbol
 year = integer
 
predicates
 
/* Предикат, использующий структуру
коллекция (имя коллекционера, библиотека) */
collection(collector,personal_library)  
 
clauses
 
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)).
 
goal
/* Определить, какие книги принадлежат Смиту.
Объект smith является частным значением из домена collector, а Books - //свободной переменной//. */
/* collection(smith,Books), write("У smith есть следующие книги ", Books),nl. */
 
/* Результат:
У smith есть следующие книги book("Alice in Wonderland","Lewis Carroll","The New American Library",1960)
У smith есть следующие книги book("Fables of Aesop","Aesop-Calder","Dover Publications",1967)
*/
 
/* Определить, какие книги принадлежат Смиту */
collection(smith,book(Title, Autor, Publisher, Year)),
write("У smith есть следующие книги: "), nl, nl,
write("Название: ", Title),  nl, 
write("Автор : ", Autor),  nl, 
write("Издательство: ", Publisher),  nl, 
write("Год издания: ", Year),nl, nl.
 
/* Найти владельцев и названия книг, напечатанных в 1967 году.
Свободными переменными являются Сollector и Title.
Знак подчёркивания (_) указывает то, что вас не интересуют объекты с родовыми именами author и publisher.
Знак подчёркивания замещает собой анонимную переменную. */
/* collection(Collector,book(Title,_,_,1967)),write("Books published in 1967:"),nl, write("Collector: ", Collector), nl, write("Title: ", Title). */
 
/* Результат
Books published in 1967:
Collector: smith
Title: Fables of Aesop
*/
 
/* Как зовут коллекционера, которому принадлежит книга под названием «Database. A Primer»? */
/* collection(Collector,book("Database: A Primer",_,_,_)),  write("Книга Database: A Primer принадлежит ", Collector),nl. */
 
/* Результат
Книга Database: A Primer принадлежит johnson
*/
 
/* Каковы названия книг, опубликованных после 1980 года? */
collection(_,book(Title,_,_,Year)),Year > 1980, 
write("Список, книг опубликованных после 1980 года: "), nl, 
write("Название: ", Title),  nl, 
write("Год издания: ", Year),nl.
 
/* Результат
Список, книг опубликованных после 1980 года: 
Название: Database: A Primer
Год издания: 1983
*/

!!Рекомендуем: Семейная Энциклопедия ЗдоровьяЧто должен знать современный человек?Самоанализ. Работа над собойОглавлениеГлавная сайта

project/prolog/listing/biblioteka.txt · Последние изменения: 2023/09/03 22:22 (внешнее изменение)

Вы можете оставить свои комментарии в разделе "Обсуждение".
Рекомендуем оформить подписку на новости данного раздела. Для этого нажмите на кнопку "Подписаться", расположенную справа снизу каждой страницы (знак конверта).




Индекс цитирования