Задача: создать программу Домашние животные с использованием составных объектов.
Создание программы
1. Создать программу:
Domains
person=person (p_name,address) % функтор персона состоит из функтора
имя персоны и функтора адрес персоны
p_name=p_name (name, fameli) % функтор имя персоны состоит из
объектов имени и фамилии
address =address (hous,street,sity) % функтор адрес персоны состоит из
объектов дом,улица, город
animal=animal(vid,a_name) % функтор животные состоит из объектов вид
животного, кличка животного
hous=integer % домен дом – числовой
vid,a_name,name,fameli,street,sity=symbol % домены вид животного,
кличка животного, имя персоны, фамилия
персоны, улица, город – символьные
Predicates
owns(person,animal) % описание составного объекта персона имеет
животного (состоит из функторов
персона и животное)
Clauses
owns(person(p_name(oleg,petrov),address(12,mira,toliatti)),animal(horse,leo)).
owns(person(p_name(oleg,petrov),address(12,mira,toliatti)),animal(dog,dik)).
owns(person(p_name(liza,rizova),address(15,matrosova,toliatti)),animal(dog,bim)).
owns(person(p_name(olga,ivanova),address(46,mira,toliatti)),animal(cat,vacia)).
owns(person(p_name(sergei,orlova),address(16,sovetskai,toliatti)),animal(dog,mili)).
|
|
owns(person(p_name(pasha,nikolaev),address(55,matrosova,toliatti)),animal(dac,kra)).
Goal
owns(person(p_name(Name_person,Famili_person),address(_,_,_)),animal(dog,Name_dog)). % показать всех хозяев собак и клички собак
Получим результат:
Name_person=oleg, Famili_person=petrov, Name_dog=dik
Name_person=liza, Famili_person=rizova, Name_dog=bim
Name_person=sergei, Famili_person=orlova, Name_dog=mili
3 Solutions
В данной программе использовались многоуровневые составные объекты. На рисунке 10 представлено дерево многоуровневого составного объекта owns.
Рисунок 10 - Дерево многоуровневого составного объекта owns
Добавим в программу выражение: персонам нравятся те виды животных, которые они содержат.
like(Name,Fameli,Vid):-owns (person (p_name (Name,Fameli), address(_,_,_)), animal(Vid,_)).
2. Определить какие животные нравятся Олегу Петрову, если ему нравятся те же животные что и Ольге Ивановой.
3. Показать всех персон содержащих лошадей, проживающих не в городе Тольятти.
4. Добавить в функтор персона составной объект дата рождения, дерево составного объекта дата рождения представлено на рисунке 11.
Рисунок 11 - Дерево составного объекта birthday
5. Показать всех персон именинников в мае месяце на содержащих кошек.
6. Организовать 2-3 запроса с составной целью.
Вопросы для самоконтроля
1. Перечислите и опишите виды объектов в Visual Prolog.
2. Дайте определение простому объекту данных.
3. Перечислите простые виды объектов в Visual Prolog.
4. Дайте определение составному объекту данных.
5. Дайте определение функтору.