- •2.2.2.1 Вызов Турбо-Пролога и главное меню системы
- •2.2.3 Редактор Турбо-Пролога
- •2.2.3.1 Создание и редактирование программного файла
- •3 Лекция №2. Элементы и конструкции языка Турбо-Пролог
- •3.1 Основные вопросы
- •3.2 Текст лекции
- •3.2.1.1 Имена (идентификаторы)
- •3.2.2.1 Предикаты
- •3.2.2.2 Факты
- •3.2.2.3 Правила
- •3.2.2.4 Цели
- •4 Лекция №3. Объекты данных. Константы, переменные, структуры, списки.
- •4.1 Основные вопросы
- •4.2 Текст лекции
- •Стандартные типы доменов Турбо-Пролога
- •4.2.2.1 Константы
- •4.2.2.2 Переменные
- •4.2.2.3 Структуры
- •4.2.2.3 Списки
- •5 Лекция №4. Структура программы на Турбо-Прологе
- •5.1 Основные вопросы
- •5.2 Текст лекции
- •5.2.2 Структура программы на Турбо-Прологе – до 10 мин.
- •5.2.3.1 Раздел опций компилятора
- •5.2.3.2 Раздел констант
- •5.2.3.3 Раздел доменов
- •5.2.3.4 Раздел предикатов
- •5.2.3.5 Раздел утверждений
- •5.2.3.6 Раздел дбд
- •5.2.3.7 Раздел целей
- •6 Лекция №5. Унификация и поиск с возвратом: программа с фактами
- •6.1 Основные вопросы
- •6.2 Текст лекции
- •7 Лекция №6. Унификация и поиск с возвратом: программа с фактами и правилом
- •7.1 Ключевые (основные) вопросы (моменты)
- •7.2 Текст лекции
- •8 Лекция №7. Унификация и поиск с возвратом: программа с фактами и несколькими правилами
- •8.1 Основные вопросы
- •8.2 Текст лекции
- •9 Лекция №8. Вопросно-ответные системы
- •9.1 Основные вопросы
- •9.2 Текст лекции
- •10 Лекция №9. Средства отладки в Турбо-Прологе
- •10.1 Основные вопросы
- •10.2 Текст лекции
- •/*Программа 5 */
- •11 Лекция №10. Простейший ввод-вывод. Окна.
- •11.1 Основные вопросы
- •11.2 Текст лекции
- •11.2.1 Простейший ввод-вывод
- •11.2.2 Окна
- •12 Лекция №11. Управление поиском решений: предикаты отсечения и возврата
- •12.1 Основные вопросы
- •12.2 Текст лекции
- •/* Программа 5 */
- •Vse_reshenia:-roditel(X,y), write(X, "родитель", y), nl, fail.
- •Vita - родитель sasha
- •/* Программа 6 */
- •/* Программа 7 */
- •13 Лекция №12. Арифметика в Турбо-Прологе. Рекурсия.
- •13.1 Основные вопросы
- •13.2 Текст лекции
- •/* Программа 8 */
- •/* Программа 9 */
- •14 Лекция №13. Динамические базы данных
- •14.1 Основные вопросы
- •14.2 Текст лекции
- •/* Программа работы с дбд*/
- •15 Лекция №14. Работа со списками
- •15.1 Основные вопросы
- •15.2 Текст лекции
- •/* Программа 10*/
- •/* Программа 11 */
- •/* Программа 12 */
- •16 Лекция №15. Экспертные системы
- •16.1 Основные вопросы
- •16.2 Текст лекции
- •/* Программа эс*/
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)!