Например, при выполнении запроса




?- X is abc.

интерпретатор будет сигнализировать о возникновении ошибки при выполнении запроса:

ЗАДАНИЕ 1 (Исследование результатов выполнения предиката is)

Выполнить следующие запросы и объяснить результаты выполнения примеров:

а)?- X is 1+2. б)?-Y=2, X is 1+Y. в)?- 12 is 4*(1+2).
г)?- X is 4, 12 is X*(1+2). д)?-X is 2+Y.

Замечания

1. Можно "сыграть" на том, что в выражениях операторы можно вставлять между операндами, и несколько упростить код вывода данных. Для этого нужно имитировать составной терм и применить знак оператора для разделения нескольких значений. Тогда, как один-единственный терм, эту конструкцию можно вывести одним предикатом write.

Например,

?- write('X'=1). % вместо write('X='),write('1')

?- write(1:2:3). % вместо write(1),write(' :'),write(2), write(' :'),write(2)

2. Термы с функторами-операторами при выводе с помощью write преобразуются в формат обычного выражения:

?- write(:(1,2)). % префиксная форма

1: 2 % инфиксная форма

3. В контекстах вычисляемых выражений функтор-оператор может использоваться прямо, без одиночных кавычек:?- X is +(1,2), write(X). Однако это допустимо не всегда. Например, в конструкции унификацией X=+(1,2) это уже недопустимо. Правильной будет запись X='+'(1,2).

4. Хотя is является одним из способов связывания переменных с числовыми значениями, то есть, исполняет роль, аналогичную операторам присваивания в процедурных языках, Пролог не допускает повторную конкретизацию переменных. Поэтому недопустимыми будут выражения типа

X is X+1.

ЗАДАНИЕ 2 (Подстановки и простейшие правила вывода)

1. В таблице приведены сведения о периодах пребывания на российском троне наиболее значимых особ из дома Романовых:

Михаил Федорович 1613-1645
Алексей Михайлович 1645-1676
Петр I 1689-1725
Екатерина II 1762-1796
Павел I 1796-1801
Александр I 1801-1825
Николай I 1825-1855
Александр II 1855-1881
Александр III 1881-1894
Николай II 1894-1917

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

'царствовал'(<Царь>,<Правил_от>,<Правил_до>).

2. Задать вопросы к составленной логической программе, соответствующие следующим формулировкам:

Когда царствовал Николай I?

Царствовал ли Павел I с 1796 по 1801 годы?

Кто царствовал, начиная с 1855 года?

Царствовал ли Петр I с 1696 по 1725 годы?

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

3. Используя протокол трассировки программы, выяснить, какие факты используются для доказательства цели в каждом случае, какие необходимы подстановки и к чему они должны быть применены (к вопросу или факту).

ЗАДАНИЕ 3 (Процедурный подход к проектированию отношения)

1. Факты, содержащие периоды царствования, можно использовать для определения нового отношения 'срок_правления', определяющего длительность срока царствования каждой монаршей особы:

'срок_правления'('Царь','Длительность').

Это отношение определяется правилом, для которого задается следующая процедурная трактовка:

Чтобы определить длительность правления некоторой царствовавшей особы, необходимо

а) найти, годы вступления на трон и конца правления, а затем,

б) вычитая из даты окончания правления дату вступления на трон, вычислить длительность царствования.

Очевидно, что правило, реализующее это процедурное поведение, будет конъюнктивным. Даты начала и конца царствования можно найти из фактов царствовал, а длительность пребывания на троне вычисляется с использованием арифметического предиката is.

2. Проверить работу процедуры, задав, например, вопрос: " Сколько лет правил Петр I?".

ЗАДАНИЕ 4 (Исследование декларативного смысла полученной процедуры)

Процедура 'срок_правления' была разработана, исходя из задачи получения ответа на один конкретный вопрос — найти длительность правления монаршей особы.

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

Необходимо выяснить, может ли построенная процедура 'срок_правления' быть использована для решения других задач:

а) " Какой царь правил заданное число лет (например, 36 лет)"?

б) Сколько лет правил каждый царь?

Дать декларативную трактовку получившегося правила.

ЗАДАНИЕ 5 (Исследование работы механизма вывода)

Анализируя протокол трассировки при ответе на вопрос а) из задания 4, сделать выводы о том:

а) в каком порядке согласуются цели в правиле 'срок_правления'?

б) в каком порядке просматриваются факты из базы данных при согласовании цели 'царствовал'?



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: