- Философия, эзотерика:
- Религии:
- Познавательное
(обо всём)
Программа «Предметы» демонстрирует альтернативные описания доменов и использует 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")).
!!Рекомендуем: Семейная Энциклопедия Здоровья ⇒ Что должен знать современный человек? ⇒ Самоанализ. Работа над собой ⇒ Оглавление ⇒ Главная сайта
Обсуждение