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

Содержание

Слайд 2

Арифметические предикаты Для выполнения основных арифметических действий можно воспользоваться несколькими предопределенными

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

Для выполнения основных арифметических действий можно воспользоваться несколькими предопределенными предикатами:


X+Y ⎯ сложение,
X-Y ⎯ вычитание,
X*Y ⎯ умножение,
X/Y ⎯ деление,
X//Y ⎯ целочисленное деление ,
X^Y ⎯ возведение в степень,
X/\Y ⎯ побитовая конъюнкция (для целых чисел),
X\/Y ⎯ побитовая дизъюнкция (для целых чисел),
X<X>>Y ⎯ побитовый сдвиг вправо на Y позиций(для целых чисел),
X mod Y ⎯ остаток от деления X на Y(для целых чисел),
Слайд 3

Арифметические предикаты abs(X) ⎯ абсолютная величина X, acos(X) ⎯ арккосинус X,

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

abs(X) ⎯ абсолютная величина X,
acos(X) ⎯ арккосинус X,
asin(X) ⎯ арксинус

X,
atan(X) ⎯ арктангенс X,
cos(X) ⎯ косинус X,
sin(X) ⎯ синус X,
exp(X) ⎯ экспонента X,
log(X) ⎯ логарифм натуральный,
log10(X) ⎯ логарифм по основанию 10,
sqrt(X) ⎯ квадратный корень X,
tan(X) ⎯ тангенс X.
Слайд 4

Арифметические предикаты Операндами арифметических предикатов являются арифметические термы. Арифметические выражения строятся

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

Операндами арифметических предикатов
являются арифметические термы.
Арифметические выражения строятся из атомов
и

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

Предикаты сравнения арифметических выражений Пусть E1 и E2 ─ арифметические выражения.

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

Пусть E1 и E2 ─ арифметические выражения.

В
Прологе существуют следующие встроенные
предикаты для сравнения арифметических
выражений:
E1>E2 истинно, если Е1 больше Е2;
E1E1>=E2 истинно, если Е1 больше или равно Е2;
E1=
Слайд 6

Предикаты сравнения арифметических выражений E1=:=E2 истинно, если Е1 равно Е2, E1=\=E2

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

E1=:=E2 истинно, если Е1 равно Е2,
E1=\=E2 истинно,

если Е1 равно Е2,
E1=E2 истинно, если Е1 и Е2 сопоставимы,
E1\=E2 истинно, если Е1 и Е2 не
сопоставимы,
X is E истинно всегда, и
неконкретизированной переменной X
присваивается значение Е.
Слайд 7

Предикаты сравнения символьных термов Пусть E1 и E2 ─ символьные термы.

Предикаты сравнения символьных термов

Пусть E1 и E2 ─ символьные термы.

Для
сравнения символьных термов используются
другие встроенные предикаты:
E1@>E2 истинно, если терм Е1 больше терма Е2,
E1@E1@>=E2 истинно, если терм Е1 больше или равен терму Е2,
Слайд 8

Предикаты сравнения символьных термов E1@= Символьные термы упорядочены в алфавитном порядке.

Предикаты сравнения символьных термов

E1@=

меньше терма Е2.
Символьные термы упорядочены в
алфавитном порядке.
Слайд 9

Примеры сравнения арифметических выражений

Примеры сравнения арифметических выражений


Слайд 10

Различие между операторами унификации “=” и арифметического сравнения “=:=” Различие между

Различие между операторами унификации “=” и арифметического сравнения “=:=”

Различие между операторами

унификации “=” и
арифметического сравнения “=:=” состоит в том,
что при выполнении оператора “=” система не
производит вычислений, а оператор “=:=”
производит вычисление выражений и сравнение и
значений.
Слайд 11

Предикаты определения типов термов. integer(X) истинно, если X—целое число; float(X) истинно,

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

integer(X) истинно, если X—целое число;
float(X) истинно, если

X—вещественное число;
number(X) истинно, если X— целое или
вещественное число;
atom(X) истинно, если X—атом;
Слайд 12

Предикаты определения типов термов. atomic(X) истинно, если X—атом или число; compound(X)

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

atomic(X) истинно, если X—атом или число;
compound(X) истинно,

если X—составной
терм (структура);
novar(X) истинно, если X—константа;
var(X) истинно, если X—переменная.
string(X) истинно, если X—строка.
Слайд 13

Предикаты ввода⎯вывода термов и символов. Предопределенные предикаты стандартного ввода/вывода являются внелогическими,

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

Предопределенные предикаты стандартного
ввода/вывода являются внелогическими,

так
как выходят за рамки модели логического
программирования.
Такие предикаты в процессе вычисления
запросов порождают побочный эффект.
Слайд 14

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

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

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

ввода/вывода
информации. Однако вычислительная
модель Пролога препятствует введению
операций ввода/вывода в виде чистых
компонентов языка.
Слайд 15

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

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

В системах программирования на языке
Пролог

используются предопределенные
предикаты для ввода/вывода термов и
символов.
Слайд 16

Предикат ввода термов Для ввода термов со стандартного устройства ввода ПЭВМ

Предикат ввода термов

Для ввода термов со стандартного
устройства ввода ПЭВМ

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

Предикат ввода термов Если переменная не конкретизирована, то запрос: ?⎯read(X). приведет

Предикат ввода термов

Если переменная не конкретизирована, то
запрос:
?⎯read(X).
приведет к

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

Примеры ввода термов ?⎯read(X). 125. X=125 Yes ?⎯read(X). n. X=n Yes

Примеры ввода термов

?⎯read(X).
125.
X=125
Yes
?⎯read(X).
n.
X=n
Yes

Слайд 19

Предикат вывода термов write Для вывода термов на стандартное устройство вывода

Предикат вывода термов write

Для вывода термов на стандартное
устройство вывода ПЭВМ

(экран
видеомонитора) используется предикат write(<терм>).
Предикат write выводит терм на экран.
Слайд 20

Предикат вывода термов write В качестве термов могут выдавать на экран

Предикат вывода термов write

В качестве термов могут выдавать на экран
константы,

значения конкретизированных
переменных и составные термы. Если
переменная не конкретизирована, то вместо
ее значения будет выдано соответствующее
переменной ссылочное число.
Слайд 21

Предикаты вывода термов nl и tab Предикат nl используется для перехода

Предикаты вывода термов nl и tab

Предикат nl используется для перехода

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

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

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

Пусть требуется определить значение
функции в зависимости

от условия.
Слайд 23

Текст программы. run:- write('Input A,B, U:'),nl, read(A), number(A), read(B), number(B), read(U),

Текст программы.

run:- write('Input A,B, U:'),nl,
read(A), number(A), read(B), number(B),
read(U), number(U),

func(A,B,U,Y),
write('Y = '), write(Y),nl.
func(A,B,U,Y):-Ufunc(A,B,U,Y):-A=func(A,B,U,Y):- U>B,Y is (A+B)/(U^2+1).
Слайд 24

Запросы к программе ?- run. Input A, B, U: -1. 3.

Запросы к программе

?- run.
Input A, B, U:
-1.
3.
-2.
Y = 3 ->
yes

Слайд 25

Запросы к программе ?- run. Input A, B, U: -1. 3.

Запросы к программе

?- run.
Input A, B, U:
-1.
3.
1.
Y = 2 ->
yes

Слайд 26

Запросы к программе ?- run. Input A, B, U: -1. 3. 4. Y = 0.11764706 yes

Запросы к программе

?- run.
Input A, B, U:
-1.
3.
4.
Y = 0.11764706
yes

Слайд 27

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

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

Пусть программа должна определять,
попадает ли точка

с координатами (X,Y) в
область D, которая задана графически, круг
с центром в точке (0,0) радиуса r =2.
Слайд 28

Заданная область

Заданная область


Слайд 29

Текст программы in_area(X,Y):- number(X), number(Y),(X^2+Y^2)= out_area(X,Y):- number(X), number(Y),(X^2+Y^2)>4. otvet(X,Y):-in_area(X,Y), write(‘заданная точка

Текст программы

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’).
Примечание. В программе используется стандартный предикат вывода на экран write (см. следующие слайды).
Слайд 30

Текст программы, использующей предикаты ввода-вывода run:- write(‘input X: ‘), read(X), write(‘input

Текст программы, использующей предикаты ввода-вывода

run:- write(‘input X: ‘), read(X), write(‘input Y:

‘), read(Y), number(X), number(Y), otvet(X,Y).
run:-not(number(X)), write(‘Error X’).
run:-not(number(Y)), write(‘Error Y’).
Слайд 31

Текст программы, использующей предикаты ввода-вывода otvet(X,Y):-in_area(X,Y), write(‘заданная точка принадлежит области D’).

Текст программы, использующей предикаты ввода-вывода

otvet(X,Y):-in_area(X,Y),
write(‘заданная точка принадлежит области D’).
otvet(X,Y):-out_area(X,Y),
write(‘заданная точка не

принадлежит области D’).
Слайд 32

Примеры запросов к программе ?- run. input X: 1. input Y:

Примеры запросов к программе

?- run.
input X: 1.
input Y: 1.
point in

area ->
yes
?- run.
input X: 2.
input Y: 3.
point out area ->
yes