Стандартные предикаты языка Пролог



 

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

 

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

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; просмотров: 258;