Главная

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

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

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


project:prolog:listing:predmety



Программа "Предметы"

Программа «Предметы» демонстрирует альтернативные описания доменов и использует 3 доменные структуры: misc_thing, book и record. Каждая из структур имеет различное количество объектов.

Использование альтернативных доменов позволяет использовать в утверждениях предикат owns применительно к различным классам вещей. Пролог не делает различия между функтором и доменной структурой. Это средство введено в Пролог преднамеренно, так как оно очень удобно именно в декларативных языках.

domains
/* Все три структуры (домена) объединены под именем thing.
Для разделения альтернативных доменов здесь применена точка с запятой - ;
Термы misc_thing, book и record являются именами структур.
Однако когда они появляются в предикатных выражениях, то одновременно играют и роль имен функторов.
Описание отношений: owns(person,thing) - владелец(имя,вещь).
То есть вещь (thing) может быть любой категории:
misc_thing - просто вещь;
book - книга;
record - пластинка;
Таким образом предикат owns используется в утверждениях применительно к различным классам вещей. 
*/
 
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")).
 
goal
 
/* Внешняя цель */
/* Вывести список людей и список всего, что у них есть  */
/* owns(P,Thing), write("У ", P, " есть " , Thing),nl. */
 
/* Результат:
У Bill есть misc_thing("sail boat")
У Bill есть misc_thing("sports car")
У Jack есть misc_thing("Motor cycle")
У Jack есть misc_thing("house trailer")
У Beth есть misc_thing("Chevy wagon")
У Beth есть misc_thing("Piano")
У Linda есть misc_thing("motor boat")
У Bill есть book("J.R.R. Tolkein","Return of the Ring")
У Bill есть book("James A. Mishener","Space")
У Jack есть book("Manuel Puig","Kiss of the Spider Woman")
У Beth есть book("Frank Herbert","Dune")
У Beth есть book("Tom Clancy","The Hunt for Red October")
У Linda есть book("Garrison Keillor","Lake Wobegon Days")
У Bill есть record("Elton John","Ice Fair","popular")
У Bill есть record("Michael Jackson - Lionel Richie","We are the World","popular")
У Jack есть record("Bruce Springsteen","Born to Run","popular")
У Jack есть record("Benny Goodman","The King of Swing","jazz")
У Beth есть record("Madonna","Madonna","popular")
*/
 
/* Вывести список владельцев и список вещей, которые  них есть */
/* owns(P,misc_thing(T)), write("У ", P, " есть вещь " , T),nl. */
 
/* Результат:
У Bill есть sail boat
У Bill есть sports car
У Jack есть Motor cycle
У Jack есть house trailer
У Beth есть Chevy wagon
У Beth есть Piano
У Linda есть motor boat
*/
 
/* Вывести список владельцев и имеющихся у них альбомов (пластинок) */
owns(P,record(_,A,_)), write("У ", P, " есть пластинка (альбом) " , A),nl.
 
/* Результат
У Bill есть пластинка (альбом) Ice Fair
У Bill есть пластинка (альбом) We are the World
У Jack есть пластинка (альбом) Born to Run
У Jack есть пластинка (альбом) The King of Swing
У Beth есть пластинка (альбом) Madonna
*/
 
/* Цель в программе */
/* Вывести список книг, которые есть у владельцев */
/*write("У людей есть следующие книги: "),nl ;
owns(_,book(A,T)), write("Автор - ", A, ", Название - " , T),nl. */
 
/* Результат
У людей есть следующие книги: 
Автор - J.R.R. Tolkein, Название - Return of the Ring
Автор - James A. Mishener, Название - Space
Автор - Manuel Puig, Название - Kiss of the Spider Woman
Автор - Frank Herbert, Название - Dune
Автор - Tom Clancy, Название - The Hunt for Red October
Автор - Garrison Keillor, Название - Lake Wobegon Days
*/

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

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")).

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

Обсуждение

Ваш комментарий:
B F C X A
 
project/prolog/listing/predmety.txt · Последние изменения: 2012/02/23 11:55 (внешнее изменение)

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


www.work-zilla.com

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