Глава 2 арифметика и структуры данных

2. 1. Арифметика

Арифметические выражения

В языке Пролог имеется ряд встроенных предикатов, предназначенных для вычисления арифметических выражений. (Встроенный предикат - это процедура, входящая в систему программного обеспечения интерпретатора Пролога.) В Прологе арифметические выражения вычисляются только тогда, когда они служат аргументами одного из таких встроенных предикатов.

Арифметическое выражение состоит из целых чисел, например:

10 –3 2000

и из нижеследующего множества операций:

+ — * / mod.

За исключением унарной операции "минус", все операции языка Пролог являются инфиксными. У инфиксной операции - два аргумента, а обозначение операции записывается между этими аргументами без употребления скобок. В приводимом ниже списке Х и Y обозначают либо числа, либо другие арифметические выражения.

Арифметические операции

X+Y

X-Y

X*Y

-X

X/Y

X mod Y

Примечание; в некоторых версиях языка Пролог имеются также числа с плавающей точкой и арифметическая операция //, предназначенная для выполнения целочисленного деления (см. приложение IV).

Предикат "is"

В языке Пролог имеется встроенный предикат "is" (есть), являющийся также инфиксной операцией. Первым аргументом здесь служит неконкретизированная переменная или целое число, а вторым аргументом — арифметическое выражение, не содержащее неконкретизированных переменных. Предикат "is" унифицирует первый аргумент с результатом вычисления второго аргумента.

|? -Y is 10* 4.

Y=40

|? -40 is 10* 4.

да

|? -Xis50, YisX/2.

Х=50

У=25

|? - Х is 3, Y is (5* Х)/2.

X=3

Y =7;

нет

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

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

Предикаты, выполняющие сравнение

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

> больше

< меньше

> = больше или равно

= < меньше или равно

=:= равно

= \ = не равно

Данные предикаты можно употреблять таким образом:

|? - 12=<24.

да

|? -50=\=50.

нет

Виды связи аргументов

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

Однако встроенные предикаты, предназначенные для выполнения арифметического сравнения, не являются двунаправленными. В них каждый аргумент должен представлять из себя арифметическое выражение, в состав которого не входят неконкретизированные переменные. Если в качестве одного из аргументов этих предикатов будет задана неконкретизированная переменная, то интерпретатор выдаст сообщение об ошибке.

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие