Стандартные предикаты языка Пролог
Арифметические предикаты.
Пролог рассчитан, главным образом, на обработку символьной информации, при этом потребность в арифметических вычислениях относительно мала. Поэтому и средства для таких вычислений весьма просты. Для выполнения основных арифметических действий можно воспользоваться несколькими предопределенными операторами:
X+Y ¾ сложение,
X-Y ¾ вычитание,
X*Y ¾ умножение,
X/Y ¾ деление,
X//Y ¾ целочисленное деление ,
X^Y ¾ возведение в степень,
X/\Y ¾ побитовая конъюнкция (для целых чисел),
X\/Y ¾ побитовая дизъюнкция (для целых чисел),
X<<Y ¾ побитовый сдвиг влево на Y позиций (для целых чисел),
X>>Y ¾ побитовый сдвиг вправо на Y позиций(для целых чисел),
X mod Y ¾ остатот от деления X на Y(для целых чисел),
abs(X) ¾ абсолютная величина X,
acos(X) ¾ арккосинус X,
asin(X) ¾ арксинус X,
atan(X) ¾ арктангенс X,
cos(X) ¾ косинус X,
sin(X) ¾ синус X,
exp(X) ¾ экспонента X,
ln(X) ¾ натуральный логарифм X,
log(X) ¾ логарифм по основанию 10,
sqrt(X) ¾ квадратный корень X,
tan(X) ¾ тангенс X,
round(X,N) ¾ округление X до N десятичных знаков (0≤N≤15).
Арифметические термы (выражения) строятся из атомов и переменных с помощью арифметических операций. Допускается инфиксная и префиксная записи арифметический выражений. Арифметические термы без переменных являются константами.
6.2. Предикаты сравнения арифметических выражений и символьных термов.
|
|
Рассмотрим встроенные арифметические предикаты для унификации арифметических выражений. Пусть E1 и E2 ─ арифметические выражения. В Прологе существуют следующие встроенные предикаты для сравнения арифметических выражений:
E1>E2истинно, если Е1 больше Е2,
E1<E2истинно, если Е1 меньше Е2,
E1>=E2истинно, если Е1 больше или равно Е2,
E1=<E2истинно, если Е1 равно или меньше Е2,
E1=:=E2истинно, если Е1 равно Е2,
E1=\=E2истинно, если Е1 равно Е2,
E1=E2истинно, если Е1 и Е2 сопоставимы,
E1\=E2истинно, если Е1 и Е2 несопоставимы,
X is Eистинно всегда, и неконкретизированной переменной присваивается значение Е.
Пусть E1 и E2 ─ символьные термы. Для сравнения символьных термов используются другие встроенные предикаты:
E1@>E2истинно, если терм Е1 больше терма Е2,
E1@<E2истинно, если терм Е1 меньше терма Е2,
E1@>=E2истинно, если терм Е1 больше или равен терму Е2,
E1@=<E2истинно, если терм Е1 равен или меньше терма Е2.
Символьные термы упорядочены в алфавитном порядке; терм rбольше терма a.
Рассмотрим отличительные особенности перечисленных выше предикатов на примерах.
Пример 1.
Оператор унификации “=” Оператор “is”
|
|
? – X=1+2. ? – X is 1+2.
X=1+2 -> X=3 ->
YES YES
В случае унификации сопоставляются переменная Х составной терм 1+2, и устанавливается, что Х сопоставима с 1+2 при подстановке {X=1+2}.
Оператор is заставляет систему вычислить значение выражения справа от обозначения оператора, и это значение сопоставить с переменной X.
Пример 2.
? – X is 3/2,Y is 3//2.
X=1.5 ->
Y=1 ->
YES
Различие между операторами унификации “=” и арифметического сравнения “=:=” состоит в том, что при выполнении оператора “=” система не производит вычислений, а оператор “=:=” производит вычисление выражений и сравнение и значений.
Пример 3.
Оператор унификации “=” Оператор сравнения “=:=”
? – 1+2=2+1. ? – 1+2 =:= 2+1.
NO YES
|
|
6.3. Предикаты определения типов термов.
Программист может предотвратить ошибки Пролога, проверив тип аргумента предиката с помощью следующих встроенных в Пролог-систему предикатов:
1) integer(X)истинно, если X—целое число;
2) float(X)истинно, если X—вещественное число;
3) number(X)истинно, если X— целое или вещественное число;
4) atom(X)истинно, если X—атом;
5) atomic(X)истинно, если X—атом или число;
6) compound(X)истинно, если X—составной атом (структура);
7) novar(X)истинно, если X—константа;
8) var(X)истинно, если X—переменная.
9) string(X)истинно, если X—строка.
Примеры программ с использованием арифметических предикатов.
Пример 1.
Программа определяет, попадает ли точка с координатами (X,Y) в область D, которая задана графически (рис. 6.1).
Программа 1.
in_area(X,Y):- number(X), number(Y),(X^2+Y^2)=<4.
out_area(X,Y):- number(X), number(Y),(X^2+Y^2)>4.
otvet(X,Y):-in_area(X,Y),write(‘заданная точка принадлежит области D’).
otvet(X,Y):-out_area(X,Y),write(‘заданная точка не принадлежит области D’).
Дата добавления: 2018-04-04; просмотров: 645; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!