Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Лабораторная работа №7.






ПРЕДЛОЖЕНИЯ (ФАКТЫ И ПРАВИЛА), ЦЕЛИ НА ЯЗЫКЕ ПРОЛОГ.

Цель работы: подробное рассмотрение предложений (фактов и правил), формирование знаний и представлений о предложениях и целях на языке программирования Пролог, а также соответствующих навыков.

Используемое программное обеспечение: Visual Prolog 5.2.

Теоретические сведения

Clauses (условия): Facts (факты) и Rules (правила)

Программа на языке Prolog состоит из предложений, которые можно разделить на две группы: факты (fact) и правила (rule) вывода. Эти фразы известны в Прологе как условия (clauses). Основа программы на Прологе составлена из условий.

О фактах

Факт представляет собой или свойства конкретного объекта, или отношения между некоторыми объектами. Пролог не должен искать или выводить подтверждения факта, он всегда верен, а сам факт может использоваться в дальнейшем как основание для выводов.

О правилах

В Прологе, как в обычной жизни, часто возможно узнать достоверность чего-то, основываясь на других фактах. Согласно конструкции Пролога то, что Вы можете вывести из другой информации является правилом. Правило - это свойство объекта или отношение между объектами, правота которого может быть известна, если известен некоторый набор других объектов. Синтаксически, они отделяются запятыми.

О целях (запросах)

Цель, составленная из двух или более частей, называется составной целью (compound goal), а каждую часть составной цели называют подцелью (subgoal).

Составные цели состоят из конъюнктивных (для их нахождения, необходимо чтобы обе подцели, разделенные запятой, были верны) и дизъюнктивных (хотя бы одна из подцелей должна быть верной, а сами подцели отделяются точкой с запятой) подцелей.

Примеры правил

1. Первый пример демонстрирует правило, которое определяет подходящие для Дианы пункты меню.

Diane is a vegetarian and eats only what her doctor tells her to eat.

Учитывая меню и предыдущее правило, Вы можете делать вывод, может ли Диана заказать особый пункт из меню или нет. Чтобы сделать это, Вы должны выяснить, соответствует ли пункт из меню, данным ограничениям.

a. Is Food_on_menu a vegetable?

b. Is Food_on_menu on the doctor's list?

c. Conclusion: If both answers are yes, Diane can order Food_on_menu. (заключение: если ответы на оба вопроса положительные, то Диана может заказать еду из меню).

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

diane_can_eat(Food_on_menu): -

vegetable(Food_on_menu),

on_doctor_list(Food_on_menu).

Заметьте наличие запятой после vegetable(Food_on_menu). Запятая выражает объединение нескольких задач, и обычно читается как " and"; vegetable(Food_on_menu) and (и) on_doctor_list(Food_on_menu) должны быть инстинными для того, чтобы

diane_can_eat(Food_on_menu) тоже было правдой.

2. Предположим, что Вы хотите задать факт Пролога, который является истинным, если Person1 - родитель Person2. Это достаточно легко сделать; просто задайте такой факт Пролога:

parent(paul, samantha).

Здесь показывается, что Пауль является родителем Саманты. Но, предположите, что Ваша база данных уже имеет факты, описывающие отношения отцовства. Например, " Пауль - отец Саманты" (" Paul is the father of Samantha"):

father(paul, samantha).

И Вы также имеете факты, описывающие отношения материнства; " Julie is the mother of Samantha" (Джулия – мама Саманты):

mother(julie, samantha).

Если бы Вы уже имелись факты, описывающие эти отношения отца/матери, это была бы пустая трата времени записывать родительские факты в базу данных для каждого из родителей.

Если вы знаете, что Person1 – отец Person2 или если Person1 – мать Person2, то можно сделать заключение, что Person1 – родитель Person2. После постановке этих условий на естественном языке, должно быть довольно просто перевести это в правило Пролога.

parent(Person1, Person2): - father(Person1, Person2).

parent(Person1, Person2): - mother(Person1, Person2).

Эти правила означают:

Person1 is the parent of Person2 if Person1 is the father of Person2.

Person1 is the parent of Person2 if Person1 is the mother of Person2.

3. А вот другой пример:

A person can buy a car if the person likes the car and the car is for sale (Человек может купить машину, если она ему нравится и если она продается).

Эти отношения могут быть представлены в Прологе с помощью следующего правила:

can_buy(Name, Model): - person(Name), car(Model), likes(Name, Model), for_sale(Model).

Эти правила описывают следующие отношения:

Name can_buy Model if (Name может купить машину если)

Name is a person and (Name это человек)

Model is a car and (Model это машина)

Name likes Model and (Name нравится данная Model)

Model is for sale (Model продается).

Это правило Пролога будет верным, если будут выполнены все условия в теле правила.

Для подробного изучения предложений рассмотрим пример для покупки автомобиля:

1. Запустите файл «Noname.pro».

2. Напишите нижеприведенный текст программы:


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал