Примеры программ с использованием арифметических предикатов



Лабораторная работа № 2.

Тема. Стандартные предикаты SWI Prolog.

 

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

 

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

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).

Арифметические термы (выражения) строятся из атомов и переменных с помощью арифметических операций. Допускается инфиксная и префиксная записи арифметический выражений. Арифметические термы без переменных являются константами.

Предикаты сравнения арифметических выражений и символьных термов.

 

Рассмотрим встроенные арифметические предикаты для унификации арифметических выражений. Пусть 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

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

Программист может предотвратить ошибки Пролога, проверив тип аргумента предиката с помощью следующих встроенных в Пролог-систему предикатов:

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—строка.

Предикаты ввода¾вывода термов и символов.

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

В системах программирования на языке Пролог используются предопределенные предикаты для ввода/вывода термов и символов.

Для ввода термов со стандартного устройства ввода ПЭВМ (клавиатуры) используется предикат read(<терм>). Предикат read читает терм, набираемый пользователем на клавиатуре; после вводимого терма должна обязательно следовать точка. Если переменная не конкретизирована, то запрос: 

?¾read(X).

приведет к вводу терма с клавиатуры, и этот терм будет присвоен в качестве значения переменной X.

Для вывода термов на стандартное устройство вывода ПЭВМ (экран видеомонитора) используется предикат write(<терм>). Предикат write выводит терм на экран. В качестве термов могут выдавать на экран константы, значения конкретизированных переменных и составные термы. Если переменная не конкретизирована, то вместо ее значения будет выдано соответствующее переменной ссылочное число.

Предикат nl используется для перехода на новую строку при выдаче данных на экран. Предикат tab(N) используется для выдачи на экран N пробелов. Предикаты nl и tab применяются только совместно с предикатов write.

 

Примеры программ с использованием арифметических предикатов.

 

Программа 1.

Программа 1 определяет, попадает ли точка с координатами (X,Y) в область D, которая задана графически (рис. 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-05; просмотров: 658; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!