время(Время, Счет) statistics (T1.L1),
степень (50,4),
statistics (T2.L2),
Время is T2-T1,
Счет is L2-L1.
При первом вызове предиката statistics переменные Т1 и L1 будут конкретизированы соответствующими значениями. Затем выполняются предикат степень(N,Р) и определяющие его целевые утверждения. При втором вызове предиката statistics переменные Т2 и L2 конкретизируются новыми значениями, полученными после выполнения предиката степень(N,Р). Процессорное время, необходимое для выполнения, составляет Т2-Т1 миллисекунд, а количество вызванных целевых утверждений равно L2-L1. Число логических выводов в секунду составляет
1000*L2-L1/T2-T1.
Встроенный предикат core выводит в текущий выходной поток статистическую информацию, относящуюся к использованию памяти. Эта информация различается в зависимости от конкретной системы, но приблизительно такова:
— количество свободного пространства ^оставшегося в базе данных Пролога (в словах);
— размер локального и глобального стеков (в словах). (Замечание. Локальный и глобальный стеки - динамические внутренние структуры данных, используемые в большинстве реализаций Пролога.)
Приложение A
Синтаксис
В приведенном ниже описании синтаксиса встречаются терминальные символы (те, из которых состоит реальная программа). Они отличны от слов, начинающихся со строчной буквы, от специальных символов ::- и комментариев, взятых в круглые скобки. Приняты следующие соглашения: текст, находящийся в угловых скобках, может появляться несколько раз, а различные варианты начинаться каждый с новой строки (это не относится к комментариям).
программа ::= предложение <предложение>
предложение ::= утверждение
управляющая команда
утверждение ::= голова. проб_симв
голова :- хвост. проб_симв
управляющая команда ::= ?- целевое утверждение
<, целевое утверждение
проб_символ (см. примеч.1)
голова ::= целевое утверждение
хвост ::= целевое утверждение
<, целевое утверждение>
(см. примеч.1)
целевое утверждение ::= атом
структура
проб_символ ::= символ табуляции,
пробел, возврат каретки
Примечание 1. Переменная (скажем, X) может выступать в качестве целевого утверждения в управляющей команде или в хвосте, но при этом она интерпретируется как целевое утверждение call(X).
терм::= константа
переменная
структура
константа::= атом
число
переменная::= загл_буква <альфа>
подчеркивание <альфа>
подчеркивание
структура::= главный_функтор (компонента
<,компонента>)
главный_функтор ::=атом
компонента ::=терм
атом ::= строчн_буква <альфа>
знак <знак>
резерв_слово
<атом_симв>'
резерв_слово ::= (см. А.5)
атом_симв ::= символ (за исключением кавычки -')
загл_буква ::= (любая из следующих букв: A B C
D E F G H I J K L M N O P Q R S
Т U V W X Y Z)
подчеркивание ::= (символ подчеркивания)
строчн_буква ::= (символ из следующих букв: a b
c d e f g h I j k l m n o p q
r s t u v w x y z)
альфа ::= (любая из цифр: 8 9)
буква ::= загл_буква
строчн_буква
знак::= (любой из следующих символов:
+ - * / \ ^ = ‘ ~ : . ? @ # $ & )
число::= целое
действительное
целое ::= цифра <цифра>
символ ::= (любой символ ASCII)
действительное::= целое_со_знаком Е целое_со_знаком целое_со_знаком. целое
целое_со_знаком .целое Е целое_со_знаком
целое_со_знаком ::= целое
+целое
–целое
прав_постр_список::= пустой_список
(голова_списка, хвост_списка)
голова_списка. хвост_списка
[голова_списка I хвост_списка]
[член<,член> I <хвост_списка>]
[член<,член>]
строка
пустой_список ::= []
голова_списка ::= терм
прав_постр_список
хвост_списка ::= прав_постр_список
член ::=терм
строка ::- "символ_стр"
символ_стр ::= символ (за исключением")
комментарий ::= /* <символ> */
(Последовательность */ не должна встречаться внутри комментария.)
Приложение Б
Встроенные операторы
Приведем список встроенных операторов и их типичное описание.
abolish(F, N) удаляет все целевые утверждения
процедуры F, имеющие арность N
abort повторно запускает Пролог-систему
(повторно вводит интерпретатор верхнего уровня)
arg(N, T,A) N-м аргументом терма Т является А
assert(X) аналогичен оператору assertz(X)
asserta(X) компилирует утверждение X и
помещает его перед другими утверждениями в эту же процедуру
assertz(X) компилирует утверждение X и
помещает его после других утверждений в эту же процедуру
atom(X) X является атомом
atomic(X) X является атомом, целым числом
или строкой
break_handler временное использование терминала
для ввода/вывода
call(X) попытка доказать терм X как целевое
утверждение
clause (X, Y) существует утверждение с головой
X и телом Y
clause_of (F, A,C) С является утверждением с
функтором F и арностью А
close (S) закрывает поток S
compare(Op, X,Y) Ор является результатом сравнения
термов X и Y
consult (F) файл F компилируется и добавляется
к программе
date (L) возвращает список L в виде
[День, Месяц, Год]
date_and_time (L) возвращает список L в виде
[День, Месяц, Год, Часы. Милуты, Секунды]
display (X) печатает терм Х в префиксной форме в текущий выходной поток
edit(X) редактирует файл X и повторно вводит его в систему
endmodule(X) конец модуля X
extcall(N, Arg) вызывает внешнюю процедуру N, передавая ей Arg
fail вызывает состояние неудачи при доказательстве целевого утверждения
functor(T, F,A) функтором терма Т является F с арностью А
get(X) переменной X присваивается следующий вводимый символ, отличный от пробела
get0(X) переменной X присваивается следующий вводимый символ
halt выход из Пролог-системы и возврат в операционную систему
import (X, M) процедура X импортируется из модуля М
integer(X) X является целым числом
X is Y X является значением арифметического выражения Y
length (L, M) длина списка L равна М (является обратимым)
listing (X) выводит все утверждения с атомом X в качестве имени процедуры
listing (X, M) аналогичен оператору listing (X), но сфера его действия ограничена модулем М
listing(X, M,N) аналогичен* оператору listing(X, M), но максимальная арность утверждений равна N
name(X, Y) связывает атом X со списком целых чисел Y (Y имя списка)
name_sub(X, N,Y) N-м символом X (атома или строки) является Y
nl применяется для перехода на новую строку в выходном потоке (при печати на дисплее)
nl(S) применяется аналогично nl для потока S
non term (X) X не является составным термом
nonvar(X) переменная X является конкретизированной
not(X) попытка доказательства предиката заканчивается успехом, если доказательство X заканчивается неудачей
op(P, T,A) определяет оператор А, имеющий тип Т и приоритет Р
open(F, S,M) открывает файл F в поток S с режимом М
М = read определяет режим чтения,
М = write - режим записи
put(X) выводит символ X
read(X) вводит следующий терм и присваивает его в качестве значения переменной X
read(X, Y) вводит следующий терм, присваивает переменной X значение введенного терма и сопоставляет его с Y
readb(X) вводит следующий терм X. Ввод символа новой строки прекращает ввод терма
readb(X, S) вводит следующий терм X из потока S. Ввод символа новой строки прекращает ввод терма
readline(X) читает строку на экране и присваивает ее в качестве значения строке X
readline(X, S) читает строку в потоке S и присваивает ее в качестве значения строке X
reconsull(F) компилирует файл F в программу, уничтожает старые утверждения
repeat всегда заканчивается успехом
reslore(X) восстанавливает состояние системы из файла X
retract(X) удаляет из базы данных утверждение, сопоставимое с X
retractall(X) удаляет из базы данных все утверждения, сопоставимые с X
save(X) записывает состояние системы в файл X
see(X) открывает файл X
seeing(X) текущим входным потоком является X
seeing(X, L,C) аналогичен оператору seeing(X), но также указывает строку/столбец в файле
seen закрывает текущий входной файл
skip(X) пропускает символы в текущем входном потоке, пока не встретится символ, сопоставимый с X
statistics(X, Y) определяет время обработки и число логических выводов
string (X) X является строкой
string_name(A, L) связывает строку А со списком целых чисел L
succ(X, Y) за целым числом X следует целое число Y
tab(X) записывает X пробелов в текущий выходной поток
tell(X) изменяет текущий выходной поток на X
telling (X) X является текущим выходным потоком.
time(L) L является списком [Часы, Минуты, Секунды]
told закрывает текущий выходной поток. Текущим выходным потоком становится дисплей ("user")
true всегда заканчивается успехом
unknown (X, Y) определяет действие в том случае, если встретится неизвестная процедура
var(X) переменная X не конкретизирована
visa(X, Y) содержащаяся внутри модуля процедура Y имеет атрибут X
write (X) записывает терм Х
write(S, X) выводит X в поток S
writedepth(O, N) изменяет максимальную вложенность глубины печати от 0 до N
writeq(X) записывает терм X, заключая его в кавычки, если это необходимо
writeq(S. X) выводит X в поток S, при необходимости заключая X в кавычки
writewidth(0,N) изменяет максимальную ширину строки (в текущем потоке) от 0 до N
X==..Y Y является покомпонентным списком структуры X
! устраняет альтернативный выбор
X = Y термы X и Y сопоставимы
X\=Y термы X и Y не сопоставимы
X==Y термы X и Y идентичны
X \==Y термы X и Y не идентичны
X<@Y X находится перед Y в стандартном порядке
X>@Y X находится после Y в стандартном порядке
X<@=Y X находится не после Y в стандартном порядке
X>@=Y X находится не перед Y в стандартном порядке
X<Y X меньше Y, при условии, что X и Y - целочисленные выражения
X<=Y X меньше или равен Y, при условии, что X и Y - целочисленные выражения
X>Y X больше Y, X и Y - целочисленные выражения
X>=Y X больше или равен Y, X и Y - целочисленные выражения
X=:=Y выражения X и Y эквивалентны, X и Y - целочисленные выражения
X -\- Y выражения X и-Y не эквивалентны
(для целочисленных выражений)
[X] транслирует файл в список имен
файлов
, конъюнкция
; дизъюнкция
Предметный указатель
Анонимная переменная 3,5
Арифметические операторы 12,14
Арифметические списковые выражения 13
Арифметические выражения 12,13,15
Арность 5,10,44
Ассоциативность оператора 45
База данных 51,66
Бинарное дерево 38
Встроенные предикаты 6,50
Входной поток 58
Выходной поток 57,71
Главный функтор 6,10
Голова 18,29
Граничные условия 19
Именованная переменная 5
Компоненты 5
Контрольная точка 63
Константа 3
Левоассоциативный 48
Отладка 61
Параметры трассировки 64
Переменная 3
Позиция оператора 45
Правило 6
Правоассоциативный 48
Предложение 6,68
Представление множеств 39
Принадлежность множеству 40
Приоритет оператора 45
Приоритетный номер 46
Программный модуль 50
Прямая трассировка 65
Рекурсия 16
Ряд Фибоначчи 27
Свободная переменная 5
Синтаксис операторов 44
Синтаксис Пролога 9
Спецификаторы 56
Списки 29
Структура 29
Термы 3
Унификация 9
Утверждения 6
Факт 6
Хвост 29
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


