Чтение онлайн

на главную - закладки

Жанры

Программирование на языке пролог
Шрифт:

Упражнение 2.1.Скажите, верны ли следующие целевые утверждения, какие переменные будут конкретизированы и какие им будут даны значения:

пилоты(А, Лондон) = пилоты(лондон, париж)

точка(Х,Y,Z) = точка(Х1,Y1,Z1) = слово(буква)

существительное(альфа) = альфа

'викарий' = викарий

f(X,X) = f(a,b)

f(X,a(b,c)) = f(Z,a(Z,c)

2.5. Арифметика

ЭВМ часто используют для выполнения действий над числами. С помощью арифметических операций можно сравнивать числа и проводить вычисления. В данном разделе

будут приведены примеры такого использования арифметических операций.

Рассмотрим сначала сравнение чисел. Для двух заданных чисел всегда можно сказать, равно лиодно число другому, меньше лиодно число другого, больше лиодно число другого. Пролог предоставляет некоторые «встроенные» предикаты, позволяющие

сравнивать числа. Для этого могут использоваться обсуждавшиеся в разд. 2.4 предикаты '='и '\='. Их аргументами могут быть конкретизированные переменные, значениями которых являются целые числа, а также целые числа, записанные в виде констант. Существует еще несколько предикатов, позволяющих сравнивать числа. Перечислим здесь все эти предикаты, отметив предварительно, что каждый из них можно использовать в форме инфиксного оператора.

X = Y X и Y представляют одно и то же число

X \= Y X и Y представляют разные числа

X ‹ Y X меньше Y

X › Y X больше Y

X =‹ Y X меньше или равно Y

X ›= Y X больше или равно Y

Отметим, что символ «меньше или равно» записывается не так, как во многих других языках программирования (обычно ‹=). Это сделано в Прологе для того, чтобы программист мог использовать похожий на стрелку атом ‹= для своих собственных нужд.

Поскольку операторы сравнения являются предикатами, можно было бы предположить, что в Прологе допустим следующий факт:

2›3.

утверждающий, что 2 на самом деле больше 3. Факты, подобные этому, с формальной стороны полностью соответствует правилам Пролога. Однако Пролог не разрешает добавлять факты к «встроенным» предикатам. Такая особенность предотвращает непредсказуемые изменения смысла встроенных предикатов. В главе 6 будут описаны все встроенные предикаты, в том числе и те, с которыми мы уже познакомились.

В качестве первого примера использования чисел предположим, что у нас есть база данных, содержащая сведения о принцах, правивших Уэльсом в 9-м и 10-м веках. Предикат правил(Х,Y,Z)истинен, если принц с именем Xнаходился у власти с года Yпо год Z. Список фактов базы данных выглядит следующим образом:

правил(родри,844,878).

правил(анаравд,878,916).

правил(хивел_дда,916,950).

правил(лаго_ад_идвал,950,979).

правил(хивел_аб_иеуаф,979,985).

правил(кадваллон,985,986).

правил(маредудд, 986,999).

Теперь предположим, что мы хотим узнать, кто был на троне Уэльса в каком-то конкретном году. Можно было

бы определить правило, аргументами которого являлись бы имя и дата и которое просматривало бы базу данных и сравнивало заданную дату с теми, что указаны в фактах. Давайте определим предикат принц(X, Y),который истинен, если принц по имени Xбыл на троне в год Y:

X был

принцем в год Y, если:

X правил с года А по год В и

Y находится между А и В или совпадает с А или В.

Первое целевое утверждение будет согласовываться с базой данных путем поиска подходящего факта. Второе целевое утверждение верно, если Yравно А, или Yравно В, или Yлежит между Аи В. Для проверки можно использовать утверждения Y›=Аи Y=‹В. Переписав это на Прологе, получаем следующее правило:

принц (X,Y):-правил(Х,А,В),Y ›= А,Y =‹ В.

Ниже приведено несколько возможных запросов и ответов, даваемых Пролог-системой.

?- принц(кадваллон,986).

да

?- принц(родри,1979).

нет

?- принц(Х,900).

Х = анаравд

да

?- принц(X,979).

X = лаго_ад_идвал

;

X = хивел_аб_иеуаф да

Заметьте использование переменных в последних примерах. Убедитесь, что вы понимаете, как работает механизм поиска Пролога при ответе на подобные вопросы.

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

Рассмотрим следующую базу данных, содержащую сведения о населении и площади некоторых стран в 1976 г. Для представления связи между страной и ее населением будет использоваться предикат нас.В наши дни население обычно характеризуется довольно большими числами. Не все версии Пролога позволяют работать с такими числами. Поэтому будем исчислять население в миллионах: нас(Х, Y)означает, что население страны Xсоставляет примерно « Yмиллионов» людей. Предикат площадьбудет обозначать связь между страной и ее площадью (в миллионах квадратных километров):

нас(сша,203).

нас(индия, 548).

нас(китай,800).

нас(бразилия,108).

площадь(сша,8).

площадь(индия,3).

площадь(китай,9).

площадь(бразилия,8).

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

Введем предикат плотность(Х,Y), где X – это страна, a Y – плотность населения в данной стране, и запишем соответствующее правило на Прологе:

Поделиться:
Популярные книги

Отморозки

Земляной Андрей Борисович
Фантастика:
научная фантастика
7.00
рейтинг книги
Отморозки

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда V

Комендант некромантской общаги 2

Леденцовская Анна
2. Мир
Фантастика:
юмористическая фантастика
7.77
рейтинг книги
Комендант некромантской общаги 2

Попаданка в деле, или Ваш любимый доктор

Марей Соня
1. Попаданка в деле, или Ваш любимый доктор
Фантастика:
фэнтези
5.50
рейтинг книги
Попаданка в деле, или Ваш любимый доктор

Ведьмак. Назад в СССР

Подус Игорь
1. Ведьмак. Назад в СССР
Фантастика:
попаданцы
альтернативная история
6.60
рейтинг книги
Ведьмак. Назад в СССР

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Огромный. Злой. Зеленый

Новикова Татьяна О.
1. Большой. Зеленый... ОРК
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Огромный. Злой. Зеленый

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Вечный. Книга IV

Рокотов Алексей
4. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга IV

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы