Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб ПРОЛОГ07.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
183.81 Кб
Скачать

Пример построения дерева опровержения

Пусть дано дерево родства:

Получим Пролог-программу:

отец(Иван,Сидор).

Факты, описывающие родственные связи.

отец(Иван,Яков).

отец(Сидор,Макар).

отец(Яков,Платон).

Правила

брат(Х,У):-отец(З,Х),отец(З,У),НЕ(РАВНО(Х,У)).

дядя(Х,У):-отец(З,У),брат(Х,З).

Вопросы

?брат(Сидор,Х).

?дядя(У,Х).

Дерево опровержения для вопроса «Яков брат ли Сидору?»:

О(и,с),О(и,я),О(с,м),О(я,п),

{(u,z)(c,x)}

{я,y}

{я,w}

Б(с,я)

Æ ДА

Дерево опровержения для вопроса «Пётр брат ли Сидору?»:

О(и,с),О(и,я),О(с,м),О(я,п),

{(u,z)(c,x)}

{я,y}

{я,w}

Б(с,я)

Нет

Модифицированное дерево для определения братьев Сидора:

О(и,с),О(и,я),О(с,м),О(я,п),

{(u,z)(c,x)}

{я,y}

{я,w}

Б(с,я)

Б(с,я)

ПРИЛОЖЕНИЕ.

П1. Арифметика в языке Пролог-д.

В языке Пролог-Д имеются встроенные предикаты, в частности предикаты арифметики и сравнения. Их описание находится в файле помощи – кнопка или окно Помощь, Язык, Встроенные предикаты, Арифметика. Найдите, откройте и просмотрите его.

Для освоения принципов работы со встроенными арифметическими предикатами и встроенными предикатами сравнения рассмотрим следующие задачи.

Например, выражение Z = X*Y запишется на Прологе в следующем виде :

?УМНОЖЕНИЕ(X,Y,Z).

Задание П1.1. На языке Пролог-Д необходимо описать вычисление объема параллелепипеда высотой h, в основании которого прямоугольник, имеющий стороны длиной a и b.

Известна формула определения объема параллелепипеда:

Vпар=a*b*h.

Предикат, который будет выполнен, если будет вычислен объем параллелепипеда, должен иметь четыре аргумента - длины сторон a и b, высоту h и величину объема. Целесообразно, чтобы Имя предиката отражало его назначение - этому критерию удовлетворит имя объем. Данный предикат будет составным:

объем(a,b,h,V):-УМНОЖЕНИЕ(a,b,S),УМНОЖЕНИЕ(S,h,V).

К базе знаний можно задать вопросы:

?объем(10,20,5,V).

ответ системы Пролог-Д:

V=1000.

Как и прежде предикат объем обратим, это означает, что используя это описание можно вычислить не только объем по заданным сторонам и высоте, но и любую (одну) сторону или высоту по заданным высоте, стороне и объему.

Задайте вопрос: ?объем(а,20,5,1000). Ответ : а = 10.

Задание П1.2: Если необходимо вычислить число x=2*3+1, то для этого достаточно набрать на клавиатуре вопрос:

?УМНОЖЕНИЕ(2,3,1,x). (<Enter>)

ответ системы:

x=7

Реализация деления x=z/y.

ДЕЛЕНИЕ(z,y,x):-УМНОЖЕНИЕ(x,y,z).

Реализация вычитания x=y-z.

ВЫЧИТАНИЕ(y,z,x):-СЛОЖЕНИЕ(x,z,y).

В данных случаях во встроенных предикатах переменные как бы перевернуты на оборот.

П2. Графические возможности «Пролог-д».

Они предназначены для выполнения вывода графики и других подобных операций. Встроенные предикаты, если они записаны в вопросе, должны выполняться одинаково, независимо от того, записана в память машины база знаний или нет, и какая это база знаний. В определенном смысле это напоминает непосредственный режим работы в языке БЕЙСИК. Например, если необходимо построить на экране отрезок, соединяющий две точки с координатами (10,10) и (200, 200), то достаточно задать вопрос:

?ЗАПИСЬ_В(“grp:”),ЛИНИЯ(10,10,100,100,1).<Enter>

Графические возможности «Пролог-Д» более подробно описаны в файле помощи – кнопка или окно Помощь, Язык, Встроенные предикаты, Графика .

ЗаданиеП2.1: введите вышеуказанное выражение и запустите его. Требуемый отрезок появится на экране. Дополнительно ниже начертите три параллельных линии разного цвета, а также нарисуйте крест (две пересеченные линии разного цвета).

Примечание: используйте файл помощи – кнопка или окно Помощь, Язык, Встроенные предикаты, Графика .

Упражнение: Попробуйте набрать вопрос:

?ЛИНИЯ(x, 10, 100, 100, 1). (<Enter>).

Объясните результат и запишите исходный текст (задание) упражнения.

Результат представить преподавателю.