Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conspekt.doc
Скачиваний:
11
Добавлен:
31.08.2019
Размер:
1.39 Mб
Скачать

5.4 Арифметические предикаты

В МПрологе 150 встроенных предикатов или операторов. Соответственно областям применения, встроенные предикаты группируются следующим образом:

  1. Арифметические предикаты.

  2. Предикаты манипулирования строками.

  3. Предикаты ввода-вывода.

  4. Предикаты управления базой знаний, работающие во время выполнения программы.

  5. Предикаты изменения управления.

  6. Предикаты обработки ошибок.

  7. Графические предикаты.

Большинство ПРОЛОГ-Систем позволяют работать только с целыми числами. Turbo, Arity Prolog - также и с вещественными. Вещественные числа записываются в форме с плавающей точкой:

5.55e1, -65e0.

ПРИМЕР 1:

Пусть требуется определить предикат четности числа

четное_число(2)

четное_число(4)

четное_число(6)

.

.

.

четное_число(N)

четное_число(2)

четное_число(N):-

четное_число(N1),

next_четное_число(N1,N).

next_четное_число(N1,N):-

N is N1+2.

 is  - оценивает арифметическое выражение, д.б. обязательно, иначе ПРОГЛОТ не будет выполнять любые арифметические действия.

 is  - б. называть "префиксным"

/ \

д е й с т в у е т

Если слева от предиката is стоит неконкретизированная переменная, то is оценивает значение правой части и приписывает его левой переменной. Возвращает TRUE.

Если слева от предиката is стоит конкретизированная переменная,т.е. N уже имеет какое-то значение, то is выполняет сравнение л. и п.ч. Если равны, то результат TRUE

Перед применением is все переменные из правой части д.б. конкретизированными.

?-next_четное_число(2,4).

T

?-next_четное_число(2,Y).

Y:=4

?-next_четное_число(N1,6)

Построим дерево выполнения. Все узлы дерева представляют собой ЦУ и промежуточные условия.

?-четное_число(6).

четное_число(N1), next_четное_число(N1,6)

четное_число(2), четн_число(N2),next_четн_чсл(N2,N1),

next_чет-ное_число(2,6)

next_четн_число(N2,6)

next_четное_число(2,6)

четн_число(2),next_четн_число(2,N1),

foult next_четн_число(N1,6)

N1 4

next_четное_число(4,6)

succed

В ПРОЛОГе можно выполнять такие арифметические операции:

Оператор

напрление

приоритет

арифмет

действие

X + Y

lr

200

сложение

X – Y

lr

200

вычитание

+ X

pf

200

Нет

воздействия

- X

pf

200

отрицание

X * Y

lr

300

умножение

X / Y

lr

300

деление

X div Y

lr

300

Целочисленное деление

X mod Y

lr

400

остаток

X ** Y

lr

500

возведение в степень

Самое сжатое определение четного числа:

четное_число(N) :- 0 is N mod 2.

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

ВСТРОЕННЫЕ ФУНКЦИИ

abs(x) - модуль х

sqrt(x) - vx (квадратный корень из х)

log(x) - lg(x)

exp(x) - e в степени х

sin(x)

cos(x)

asin(x) - arcsin(x)

acos(x) - arccos(x)

atan(x) - arctg(x)

x^2 - возведение в степень

random - генерация случайных чисел

ОПЕРАЦИИ СРАВНЕНИЯ

Все операции отношения оценивают свои операнды прежде чем их сравнить

>= ; <= ; > ; < ;

=\= - не равно;

=:= - равно;

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