TuProlog: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 206:
 
На данный момент, tuProlog не поддерживает управление исключениями: в действительности, исключение делает утверждение и (или) функтор, в котором оно присутствует, ошибочным, что может привести к ошибке работы самой программы.
 
=== Встроенные утверждения ===
 
Данный раздел содержит список встроенных утверждений, которые содержатся в tuProlog.
Следуя традиции в описании встроенных аргументов (built-in argument Операция выполняется согласно следующему правилу description), которая уходит корнями в те далекие времена, где властвовала императивная интерпретация (imperative interpretation), символ “+” перед обозначает исходный аргумент, “-” обозначает итоговый аргумент, “?” обозначает исходный или итоговый аргумент, “@” обозначает исходный аргумент, который должен быть несвободным (связанным).
 
==== Управление настройками ====
• true/0
true - истина.
• fail/0
fail - ложь.
• ’,’/2
’,’(Первый аргумент, Второй аргумент) истинный только в том случае, если и первый и второй аргументы истинны.
• !/0
! - истина. Удаляются все пункты выбора между сокращенной (the cut) и исходной (parent) задачей родителем цели. Результатом операции будет, использование текущего оператора и подстановок, используемых в сокращенной задаче.
• ’$call’/1
’$call’(Goal) истинно тогда, когда задача (Goal) истинна. Это действие нельзя сократить.
Операция выполняется согласно следующему правилу: call(+callable term(вызываемый термин))
• halt/0
halt завершает выполнение программы Prolog т возвращается к системе что вызвала процессор (processor).
• halt/1
halt(X) завершает выполнение программы Prolog т возвращается к системе что вызвала процессор, минуя значение X.
Операция выполняется согласно следующему правилу: halt(+int)
 
==== Унификация терминов и управление ====
 
• is/2
is(X, Y) истинно, если X можно объединить со значением выражения Y.
Операция выполняется согласно следующему правилу: is(?term, @evaluable)
• ’=’/2
’=’(X, Y) истинны, если X и Y объединяемы.
Операция выполняется согласно следующему правилу: ’=’(?term, ?term)
• ’\=’/2
’\=’(X, Y) истинное, если X и Y нельзя объединить.
Операция выполняется согласно следующему правилу: ’\=’(?term, ?term)
• ’$tolist’/2
’$tolist’(Составное слово, Список) истинно, если Составное слово – составное термин, и Список – списковое представление составного слова, с именем первого элемента и другими аргументами, как другие элементы.
Операция выполняется согласно следующему правилу: ’$tolist’(@struct, -list)
• ’$fromlist’/2
’$fromlist’(Составное слово, Список) истинно, если Составное слово, объединяемо со списковой репрезентацией списка.
Операция выполняется согласно следующему правилу: ’$fromlist’(-struct, @list)
• copy term/2
copy term(Термин1, Термин2) истинно, если Термин2 объединяем с переименованной копией Термина1.
Операция выполняется согласно следующему правилу: copy term(?term, ?term)
• ’$append’/2
’$append’(Элемент, Список) истинно, если Список это список (List is a list), с легким намеком на Элемент прилагаемый к списку.
Операция выполняется согласно следующему правилу: ’$append’(+term, @list)
 
==== Управление базой знаний ====
 
• ’$find’/2
’$find’(Оператор,Список операторов (ClauseList)) истинно, если Список операторов является списком, а оператор оператором, при этом все операторы базы данных соответсвуют Оператору прикреплены к списку.
Операция выполняется согласно следующему правилу: ’$find’(@clause, @list)
• abolish/1
abolish(PI) полностью удаляет динамичное утверждение, соответсвующее Индикатору Утверждения (predicate indicator PI).
Операция выполняется согласно следующему правилу: abolish(@term)
• asserta/1
asserta(Оператор) истинно, при этом Оператор добавлен в начало базы данных.
Операция выполняется согласно следующему правилу: asserta(@clause)
• assertz/1
assertz(Оператор) истинно, при этом Оператор добавлен в конец базы данных.
Операция выполняется согласно следующему правилу: assertz(@clause)
• ’$retract’/1
’$retract’(Оператор) истинно, если база данных содержит по крайней мере один оператор объединенный с Оператором. При этом оператор удаляется из базы данных. Повторное выполнение операции не возможно.
Операция выполняется согласно следующему правилу: ’$retract’(@clause)
 
==== Управление операциями и признаками ====
• op/3
op(Приоритет, Спецификатор, Оператор) истинно. Он всегда выполняется, изменяя таблицу операторов. Если приоритет равен 0, тогда оператор удаляется из таблицы операторов; иначе, Оператор добавляется к таблице операторов, с приоритетом (нижние связывают сильнее) Приоритет и ассоциативностью определяемой Спецификатором. Если оператор, с одинаковым символом Оператора и Спецификатора уже существует в таблице операторов, предикат модифицирует его приоритет в соответствии с аргументом Приоритета.
Операция выполняется согласно следующему правилу: op(+integer, +specifier, @atom or atom list)
• flag list/1
flag list(Список признаков) истинно, и Список признаков содержит признаки определяемые в ядре TuProlog.
Операция выполняется согласно следующему правилу: flag list(-list)
• set prolog flag/2
set prolog flag(Признак, Значение) истинно, и ассоциируется со значением признака, где значение находится в пределах допустимых значений (implementation defined range of values for Flag).
Операция выполняется согласно следующему правилу: set prolog flag(+flag, @nonvar)
• get prolog flag/2
get prolog flag(Признак, Значение) истинно, если Признак поддерживается TuProlog и Значение ассоциируется с ним. get prolog flag/2 не обратимо.
Операция выполняется согласно следующему правилу: get prolog flag(+flag, ?term)
 
==== Управление библиотеками ====
 
• load library/1
load library(Имя Библиотеки) истинно, если Имя Библиотеки соответствует библиотеке tuProlog, которая доступна для загрузки.
Определенные библиотеки загружаются автоматически. Имя Библиотеки, это имя класса Java предоставляющего библиотеку.
Операция выполняется согласно следующему правилу: load library(@string)
• unload library/1
unload library(Имя Библиотеки) истинно, если Имя Библиотеки соответствует библиотеке tuProlog, которая доступна для загрузки. Определенные библиотеки выгружаются автоматически. Имя Библиотеки, это имя класса Java предоставляющего библиотеку.
Операция выполняется согласно следующему правилу: unload library(@string)
 
==== Директивы ====
 
Директивы используются в Prolog только как запросы, моментально выполняющиеся при обращении к ним. В случае если имеется утверждение с таким же процедурным именем, как существующая директива, они будут выполнять одинаковые действия. Их аргументы будут удовлетворять одним и тем же ограничениям, таким как безошибочное выполнение соответствующего утверждения, в противном случае их поведение непредсказуемо.
 
В tuProlog, директивы не компонуемы: каждый запрос должен содержать одну и только одну директиву. Если возникает необходимость использования нескольких директив, необходимо использовать множественные запросы.
• :- op/3
op(Приоритет, Спецификатор, Оператор) добавляет оператор в таблицу операторов, с приоритетом (нижние связывают сильнее) Приоритет и ассоциативностью определяемой Спецификатором.
Операция выполняется согласно следующему правилу: op(+integer, +specifier, @atom or atom list)
• :- flag/4
flag(Имя признака, список допустимых значений (ValidValuesList), исходное значение (DefaultValue), возможность модификации (IsModifiable)) добавляет новый признак, определяемый Именем Признака, с допустимыми значениями указанными в списке с исходным значением.
Операция выполняется согласно следующему правилу: flag(@string, @list, @term, @true, false)
• :- initialization/1
initialization(Задача) устанавливает задачу, которая запускается сразу после проверки теории.
Операция выполняется согласно следующему правилу: initialization(@goal)
• :- solve/1
Синоним инициализации/1.
Операция выполняется согласно следующему правилу: solve(@goal)
• :- consult/1
consult(Имя файла) немедленно загружает теорию содержащуюся в указанном имени файла.
Операция выполняется согласно следующему правилу: consult(@string)