14.6.4 Сравнение результатов арифметических выражений
Системные предикаты
=:=, =\=, >, <, >=
и
<=
определены как
инфиксные операторы и применяются для сравнения результатов двух
арифметических выражений.
Для
предиката
@
доказательство
целевого
утверждения
X@Y
заканчивается успехом, если результаты вычисления арифметических
выражений
Х
и
Y
находятся в таком отношении друг к другу, которое
задается предикатом
@
.
Такое целевое утверждение не имеет побочных эффектов и не может
быть согласовано вновь. Если
Х
или
Y
— не арифметические выражения,
возникает ошибка.
С помощью предикатов описываются следующие отношения:
Х =:= Y-Х
- равно
Y
,
Х =\= Y-Х
- не равно
Y
,
Х < Y-Х
- меньше
Y
,
Х > Y-Х
- больше
Y
,
Х <= Y-Х
- меньше или равно
Y
,
Х >= Y-Х
- больше или равно
Y
.
Использование предикатов иллюстрируют такие примеры:
а > 5
- заканчивается неудачей,
5+2+7 > 5+2
- заканчивается успехом,
3+2 =:= 5
- заканчивается успехом,
3+2 < 5
- заканчивается неудачей,
2+1 =\= 1
- заканчивается успехом,
N > 3
- заканчивается успехом, если
N
больше
3
, и неудачей
в противном случае.
131
14.7 Структуры данных
Термы
Пролога
позволяют
выразить
самую
разнообразную
информацию. Рассмотрим два вида широко используемых структур данных:
списки и бинарные деревья, и покажем, как они представляются термами
Пролога.
14.7.1 Списки
Задачи, связанные с обработкой списков, на практике встречаются
очень часто. Например понадобилось составить список студентов,
находящихся в аудитории. С помощью Пролога возможно определить список
как последовательность термов, заключенных в скобки. Приведем примеры
правильно построенных списков Пролога:
[джек, джон, фред, джилл, джон]
[имя (джон, смит), возраст(джек, 24), X]
[Х.У.дата (12,январь, 1986) ,Х]
[]
Запись
[H|T]
определяет список, полученный добавлением
Н
в начало
списка
Т
. Говорят, что
Н
— голова, а
Т
— хвост списка
[H|T]
. На вопрос
?-L=[a|[b, c, d]].
будет получен ответ
L=[a, b, c, d],
а на запрос
?-L= [a, b, c, d], L2=[2|L]
— ответ
L=[a, b, c, d], L2- [2, a, b, c, d]
Запись
[Н|Т]
используется для того, чтобы определить голову и хвост
списка. Так, запрос
?- [X|Y]=[a, b, c].
дает
Х=а, Y=[b, c]
Заметим, что употребление имен переменных
Н
и
Т
необязательно.
Кроме записи вида
[H|T]
, для выборки термов используются переменные.
Запрос
?-[a, X, Y]=[a, b, c].
определит значения
X=b Y=c
132
а запрос
?- [личность(Х)|Т]=[личность(джон), а, b].
значения
Х=джон Т=[а, Ь].
Do'stlaringiz bilan baham: |