Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prolog.doc
Скачиваний:
31
Добавлен:
12.03.2015
Размер:
929.28 Кб
Скачать

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

В Прологе не допускаются присваивания вида

Сумма = 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 не является встроен­ным решателем уравнений.

3.5. Сравнение результатов арифметических выражений

Системные предикаты =:=, =\=, , , = и = определены как инфикс­ные операторы и применяются для сравнения результатов двух арифметических выражений.

Для предиката @ доказательство целевого утверждения X@Y за­канчивается успехом, если результаты вычисления арифметических выражений Х и Y находятся в таком отношении друг к другу, кото­рое задается предикатом @.

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

С помощью предикатов описываются следующие отношения:

X =:= Y Х равно Y

Х =\= Y Х не равно Y

Х Y Х меньше Y

Х Y Х больше Y

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

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

Использование предикатов иллюстрируют такие примеры:

а 5 заканчивается неудачей

5+2+7 5+2 заканчивается успехом

3+2 =:= 5 заканчивается успехом

3 + 2 = 5 заканчивается неудачей

2 + 1 =\= 1 заканчивается успехом

N 3 заканчивается успехом, если

N больше 3, и неудачей в противном

случае

Глава 4 Рекурсия

Рекурсия является мощным методом программирования. В Про­логе она приобретает особую важность, поскольку здесь отсутствуют циклические конструкции while...do... и repeat...until, присущие обычным языкам программирования. В данной главе на числовых примерах показаны идеи рекурсии.

4.1. Стратегия «разделяй и властвуй»

Обычная стратегия решения задач состоит в том, чтобы разбить исходную задачу на более мелкие подзадачи, решить их, а затем объ­единить подзадачи с тем, чтобы получить решение исходной задачи. В этом и заключается стратегия «разделяй и властвуй». Может потребоваться разбиение подзадачи на еще более мелкие и решение их по частям.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]