Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сии лаба2.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
200 Кб
Скачать
☆
  1. Вопросы или целевые утверждения

Чтобы выполнить простейшую программу на Прологе, откроем файл с программой "Меню" в среде Visual Prolog 5.2.

Программа начинает выполняться, если в нее ввести те вопросы, отве­ты на которые хочет получить пользователь. Для этого предназначен раз­дел GOAL (Цель). В нем записываются необходимые вопросы - третий тип утверждений в программе на Прологе.

Введите такие вопросы: "Есть ли в ресторане рыбное блюдо "окунь во фритюре"?"

GOAL

рыба("окунь_во_фритюре").

В диалоговом окне получаем ответ

yes

или "Является ли мясным блюдом блюдо "артишоки в белом соусе"?"

GOAL

мясо("артишоки_в_белом_соусе") .

по

При получении вопроса (целевого утверждения) программа начина­ет выполняться. Суть выполнения состоит в поиске в базе знаний заго­ловка утверждения, соответствующего вопросу. Если такое утверждение (факт) есть, то на экране появляется ответ "yes" (да). Если нет, как в слу­чае вопроса закуска("салат_из_помидоров"), то на экране появляется от­рицательный ответ "по"(нет).

Вопрос, или целевое утверждение, с помощью предиката описывает отношение (гипотезу), истинность которого для данной предметной об­ласти неизвестна и должна быть определена в процессе выполнения про­граммы, в процессе согласования вопроса с утверждениями базы знаний. Синтаксис вопроса совпадает с синтаксисом предиката.

  1. Переменные

Продолжим работу с "Меню". Предположим, что мы хотим получить информацию обо всех закусках. В этом случае мы, естественно, задали бы вопрос: "Какие блюда являются закусками?" или более формализова­но: "Существуют ли те блюда (объекты) X, которые являются закуска­ми?". Здесь имя X обозначает не какой-то конкретный объект, а любой, принадлежащий некоторому множеству (может быть пустому) объектов, обладающих свойством быть закуской и которые нужно найти в меню. В этом случае говорят, что X есть переменная.

На Прологе вопрос о закусках записывается так:

GOAL

закуска(X).

Будет получен ответ:

Х=артишоки_в_белом_соусе

Х=трюфели_в_шампанском

Х=салат_с_яйцом

3 Solutions

Все эти ответы содержат множество тех значений переменной X, при которых утверждение закуска(Х) истинно.

1.4. Правила

С помощью отношений, которые составляют начальную базу знаний, можно конструировать более сложные и более общие отношения. На­пример, с помощью отношений мясо и рыба, выражающих то, что их ар­гумент является вторым мясным или рыбным блюдом, можно определить отношение блюдо: "Блюдо - это второе мясное или рыбное блюдо", что записывается на Прологе в виде двух правил следующим образом:

PREDICATES /* Описание предиката блюдо */

блюдо(name)

CLAUSES

/*Правила, задающие определение понятия блюдо*/

блюдо(Y):-мясо(Y).

блюдо(Y):-рыба(У).

и читается так: "Y является блюдом, если Y - второе мясное блюдо, или Y является блюдом, если Y - второе рыбное блюдо". Последовательность двух правил означает их дизъюнкцию (операцию "или": первое правило или второе). Область действия переменной ограничена правилом, в ко­тором она определена. Поэтому переменная из первого правила никак не связана с переменной Y из второго. Вопрос "Что является блюдом?", вы­раженный в виде:

GOAL

блюдо(Y).

вызовет следующие ответы:

У=говяжье_жаркое

У=цыпленок_в_липовом_цвете

У=окунь_во_фритюре

У=фаршированный_судак

4 Solutions

Можно построить и более сложные правила. Займемся теперь состав­лением обеда, в который входят закуска, второе блюдо (мясное или рыб­ное) и десерт. Обед является, следовательно, тройкой (X, Y, Z), где X - закуска, Y - блюдо, Z - десерт. В Прологе это выражается очень естест­венно в виде следующего правила:

/* Определение отношения "обед" */

обед(X,У,Z):-закуска(X), блюдо(Y), десерт(Z).

Оно читается так: "X, Y, Z удовлетворяют отношению обед, если X удовлетворяет отношению закуска, Y удовлетворяет отношению блюдо и Z удовлетворяет отношению десерт". Формально говоря, мы определили новое отношение как конъюнкцию (операцию И) трех других отноше­ний, как конъюнкцию предикатов.

На вопрос "Что является обедом?":

GOAL

обед(X,Y,Z).

вы получите ответ:

Х=ар'гишоки_в_белом_соусе, У=говяжье_жаркое,

Z=грушевое_мороженое

Х=артишоки_в_белом_соусе,У=говяжье_жаркое,

Z=земляника_со_взбитыми_сливками

………………………………………………………..

36 Solutions

т. е. выдаст список всех 36 возможных комбинаций из трех блюд. Попро­буйте это выполнить.

Правила описывают зависимость некоторого отношения от группы других отношений (зависимость предиката от группы других предика­тов), называемых условиями (или целевыми утверждениями). Правило соответствует условному высказыванию (импликации) и имеет следую­щую синтаксическую структуру (рис. 2).

ПРАВИЛО

<заголовок – предикат> :- (<тело>).

<предикат 1>

<предикат 2>

………………..

<предикат N>

<имя отношения>(<список аргументов>) :-

<имя отношения>(<список аргументов>).

Рис. 2. Синтаксическая структура правила

Правило состоит из заголовка и тела правила. Заголовок и тело соеди­няются с помощью символа соответствующего в русском языке сло­ву "если". Правила также заканчиваются точкой. Заголовок правила опи­сывает отношение, для определения которого предназначено правило. Тело правила в большинстве случаев представляет собой конъюнкцию предикатов (целевых утверждений), которые должны быть последова­тельно согласованы с базой знаний для того, чтобы заголовок правила был истинным. Предикаты (цели) в теле правила разделяются запятыми. Правило - это некоторое общее утверждение. Оно описывает закономер­ность, свойственную не какому-то конкретному объекту, а целому классу объектов. Поэтому в аргументы правил входят переменные. Правило можно рассматривать и как разбиение сложной задачи (цели) на более простые подзадачи (подцели).

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

любит(Х, "баскетбол"):-любит(X, "бег").

/* X любит баскетбол, если X любит бегать */

можно_купить(X):-есть_в_магазине(X,V),V<3000.

/* можно купить X, если X есть в магазине и стоит меньше

3000 р. */

старше (Р1#Р2) : - возраст (PkVJ ,

возраст (P2,V2),

Vi>V2.

/*субъект Рх старше субъекта Р2,если его возраст больше

возраста Р2*/