Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРЕДСТАВЛЕНИЕ ЗНАНИЙ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВА...doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
1.08 Mб
Скачать

1.9. Арифметические выражения

Язык Пролог не предназначен для программирования задач с большим количеством арифметических операций. Для этого используются процедурные языки программирования. Однако в любую Пролог-систему включаются все обычные арифметические операторы:

+ сложение

- вычитание

* умножение

/ деление

mod остаток от деления целых чисел

div целочисленное деление.

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

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

Диапазоны чисел, входящих в арифметические выражения, зависят от реализации Пролога. Например, система ICLPROLOG оперирует с целыми числами со знаком в диапазоне: –8388606 ... 8388607.

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

Числа и их диапазоны определяются в конкретной реализации Пролога.

Арифметические списковые выражения. Если Х - арифметическое выражение, то список [X] также является арифметическим выражением, например [1,2,3]. Первый элемент списка используется как операнд в выражении. Так,

X is ([l,2,3]+5)

имеет значение 6.

Арифметические списковые выражения полезны и при обработке символов, поскольку последние могут рассматриваться как небольшие целые числа. Например, символ "а" эквивалентен [97] и, будучи использован в выражении, вычисляется как 97. Поэтому значение выражения “р”+"А"-"а" равно 80, что соответствует коду ASCII для “Р”.

Переменная, конкретизированная арифметическим выражением.

Х-5+2 и У-3*(2+А)

Унарные функторы:

+(Х) и -(У)

Функторы преобразования. В некоторых реализациях Пролога имеется арифметика с плавающей точкой, а следовательно, и функторы преобразования. Например, float (X) преобразует целое число Х в число с плавающей точкой.

1.10. Вычисление арифметических выражений

В Прологе не допускаются присваивания вида Сумма=2+4.

Выражение такого типа вычисляется только с помощью системного предиката is, например:

Сумма is 2 + 4.

Предикат is определен как инфиксный оператор. Его левый аргумент - или число, или неконкретизированная переменная, а правый аргумент - арифметическое выражение.

Попытка доказательства целевого утверждения Х is Y заканчивается успехом в одном из следующих случаев:

а) Х - неконкретизированная переменная, а результат вычисления выражения Y – число;

б) Х - число, которое равно результату вычисления выражения Y. Цель Х is Y не имеет побочных эффектов и не может быть согласована вновь. Если Х не является неконкретизированной переменной или числом, или если Y - не арифметическое выражение, возникает ошибка.

Примеры:

D is 10- 5 заканчивается успехом и D становится равным 5

4 is 2 * 4 - 4 заканчивается успехом

2 * 4 - 4 is 4 заканчивается неудачей

a is 3 + 3 заканчивается неудачей

X is 4 + а заканчивается неудачей

2 is 4 - X заканчивается неудачей

Обратите внимание, что предикат is требует, чтобы его первый аргумент был числом или неконкретизированной переменной. Поэтому М - 2 is 3 записано неверно. Предикат is не является встроенным решателем уравнений.