Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1414-Лекции.doc
Скачиваний:
29
Добавлен:
25.12.2018
Размер:
419.84 Кб
Скачать

13 Лекция №12. Арифметика в Турбо-Прологе. Рекурсия.

Время: 2 часа (90 мин.)

13.1 Основные вопросы

  • арифметика;

  • рекурсия.

13.2 Текст лекции

13.2.1 Арифметика – до 45 мин.

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

Арифметические операторы Турбо-Пролога это: + , - , / , div, mod.

Предикаты сравнения это: <, <=, =, >, >=, <> или ><.

К встроенным функциям относятся следующие функции:

abs(X)

- вычисление модуля аргумента;

cos(X), sin(X), tg(X), arctg(X)

- вычисление тригонометрических функций (аргумент представляется в радианах);

exp(X)

- возведение e в степень X;

ln(X)

- логарифм X по основанию e;

log(X)

- логарифм X по основанию 10;

sqrt(X)

- корень квадратный из X;

random(X)

- генерация для X случайного числа в диапазоне от 0 до 1;

random(X)

- генерация для X случайного числа в диапазоне от 0 до X;

round(X)

- округление X до целого;

trunc(X)

- отбрасывание разрядов числа X после десятичной точки;

Арифметические выражения в Турбо-Прологе вычисляются также, как и в других языках программирования, т.е. при использовании скобок первым вычисляется самое внутреннее выражение, затем внешнее по отношению к нему и т.д. Операции равных приоритетов выполняются последовательно слева направо. Наивысший приоритет в Турбо-Прологе имеют унарные операции, затем по приоритету идут бинарные операции умножения, деления, вычисления частного и остатка от деления нацело. Низший приоритет в Турбо-Прологе у бинарных операций сложения и вычитания.

Предикаты сравнения "работают" в Турбо-Прологе так же, как в других языках программирования. Исключение составляет лишь предикат равенства. В Турбо-Прологе этот предикат кроме присваивания имеет и другой смысл - проверки равенства двух термов. В этом случае предикат сравнения выражает то, что "два терма должны быть равными для того, чтобы выражение было истинным". Интерпретация предиката равенства как предиката присваивания или как предиката проверки равенства определяется контекстом, т.е. зависит от того, являются ли значения используемых термов свободными или связанными.

Рассмотрим например выражение:

kata = kata.

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

Рассмотрим другое выражение:

kata = ana.

Так как здесь оба терма различны, то равенство ложно.

Рассмотрим пример в котором используется переменная:

X = vera.

Здесь знак равенства не обязательно является предикатом присваивания. Если X свободная, на данный момент, переменная то ей присваивается значение vera. Если же X связанная переменная и, значения одинаковы, то выражение истинно, если нет - ложно.

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

В Турбо-Прологе допустимо сравнение символов и строк. Сравнение символов реализуется путём сравнения их ASCII-кодов. Например 'a' < 'b'; так как их коды 97 и 98 (97 < 98). Сравнение строк идёт по их начальным символам. Если они равны, то сравнивается следующая пара символов и т.д.

13.2.2 Рекурсия – до 45 мин.

Повторяющиеся операторы в Турбо-Прологе Могут быть выполнены не только с помощью оператора fail. Ещё одним средством организации повторений является использование рекурсивных правил.

Рекурсия – это использование в теле правила самого этого правила. В общем виде рекурсивное правило может быть представлено следующим образом:

<рекурсивное правило> :- <список предикатов>,

<рекурсивное правило>,

<список предикатов>.

Предикаты внутри рекурсивных правил могут отсутствовать. Выход из рекурсии осуществляется с помощью выполнения условия завершения рекурсии. Организацию рекурсии рассмотрим на примере вычисления факториала числа N, осуществляемого по алгоритму:

а. Если N=1, то N!=1

б. Иначе : N=N*(N-1)!

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