Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Практическая информатика
  3. Глава 10 Логическое программирование

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

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

X + Y Сумма X и Y
X - Y Разность X и Y
X * Y Произведение X и Y
X / Y Деление X на Y
X mod Y Остаток от деления X на Y
X // Y Деление нацело X на Y
X ** Y Возведение X в степень Y
- X Смена знака X
abs(X) Абсолютная величина числа X
max(X,Y) Большее из чисел X и Y
min(X,Y) Меньшее из чисел X и Y
sqrt(X) Квадратный корень из X
random(Int) Случайное целое число в диапазоне от 0 до Int
sin(X) Синус X
cos(X) Косинус X
tan(X) Тангенс X
log(X) Натуральный логарифм (ln) числа X
log10(X) Десятичный логарифм (lg) числа X
float(X) Вещественное число, соответствующее целому числу X
pi 3.14159 (приближенное значение числа pi)
е 2.71828 (приближенное значение числа е)

Еще раз отметим, что Пролог старается скрыть различие между арифметикой целых и вещественных чисел везде, где это можно.

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

?- X is 2.5 + 2.5.
X = 5
Yes

?- X is 4/(2+1).
X = 1.33333
Yes

?- X is cos(3*pi).
X = -1
Yes

?- 1 is sin(pi/2).
Yes

?- 1.0 is sin(pi/2).
No

Поясним несколько неожиданный ответ Пролога в последнем запросе. Значение sin(pi/2) автоматически округляется предикатом is до целого значения 1, которое не удается унифицировать с вещественным числом 1.0. Предикат float заставит считать значение sin(pi/2) вещественным числом:

?- 1.0 is float( sin(pi/2)).
Yes

Для сравнения арифметических выражений используется ряд операторов. Цель X > Y (больше) будет успешна, если выражение X будет соответствовать большему числу, чем выражение Y.

Аналогично используются операторы < (меньше), =< (меньше или равно), >= (больше или равно), =\= (не равно) и =:= (арифметически равный). Различия между операторами =:= и = очень существенны. Первый оператор сравнивает значения арифметических выражений, тогда как последний пытается унифицировать их.


Пример

?- 2 ** 3 =:= 3 + 5.
Yes

?- 2 ** 3 = 3 + 5.
No

?- 1.0 = float(sin(pi/2)).
No

?- 1.0 =:= sin(pi/2).
Yes

Заметьте, что цель X =:= Y будет истинна, даже если один из термов есть целое число, а другой - равное ему вещественное.


Пример
Порядок подцелей в запросе влияет на его результат:

?- X is 4+Y, Y=3. 
ERROR: Arguments are not sufficiently instantiated 

?- Y=3, X is 4+Y.
Y = 3
X = 7
Yes

В первом запросе сообщение об ошибке появилось потому, что первая подцель запроса (X is 4+Y) потерпела неудачу, т. к. в момент ее обработки невозможно вычислить выражение 4+Y.


Задание
Какой ответ выдаст интерпретатор Пролога на следующие запросы?

  1. ?- 3 is 2+1.
  2. ?- X=3/2.
  3. ?- X is 3/2.
  4. ?- X is min(tan(pi/4), log(pi)).

Перекрёстные ссылки книги для Арифметические выражения

  • Решение логических задач
  • Вверх
  • Примеры программ

Book navigation

  • Содержание
  • Глава 1 Основы информатики
  • Глава 2 Операционные системы и сети
  • Глава 3 Графика на компьютере
  • Глава 4 Обработка текста
  • Глава 5 Основы языка HTML
  • Глава 6 Динамический HTML
  • Глава 7 Простейшие вычисления
  • Глава 8 Системы компьютерной алгебры
  • Глава 9 Модели и программирование
  • Глава 10 Логическое программирование
    • Классическая логика и язык Пролог
    • Термы и объекты
    • Факты
    • Запросы к базе данных
    • Унификация
    • Правила
    • Рекурсивные процедуры
    • Базы знаний
    • Решение логических задач
    • Арифметические выражения
    • Примеры программ
    • Списки
  • Глава 11 Введение в ООП
  • Глава 12 Программирование и интернет

Последние материалы

  • Эмулятор терминала Terminator
    4 hours ago
  • Приложение scanimage
    6 days 1 hour ago
  • Утилита sensors
    1 week 2 days ago
  • Сканер Rkhunter
    2 weeks 3 days ago
  • Программа resize2fs
    3 weeks 2 days ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru