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

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 251:
=== Настройка tuProlog ===
 
Разработчики PrologTuProlog предлагают четыре способа настройки tuProlog.:
 
Теории — в tuProlog теория является текстом, т.е. последовательностью клаузов и/или директив.
Он может быть настроен с помошью:
Клаузы и директивы ограниченны точками и разделяются пробелом. Теории могут быть загружены и выгружены в с помощью библиотечных предикатов.
 
Директивы — записываются с помощью:
Теории — в tuProlog теория является текстом, т.е. последовательностью положений(clauses) и/или директив (directives). Положения и директивы ограниченны точками и разделяются пробелом. Теории могут быть загружены и выгружены в с помощью библиотечных утверждений.
 
Директивы (Directives) — директива может быть записана с помощью: -/1 утверждения. Предиката, котороекоторый полностью поддерживается tuProlog, и может быть использованоиспользован для настройки tuProlog (set_prolog_flag/1, load library/1, consult/1, solve/1), формата и синтаксиса read-terms (в соответствии с ISO стандартом, read-term это термин Prolog с последующим завершающим символом, состоящий из текста и точки) (op/3). На директивах я подробно остановлюсь в следующих главах.
 
2. Формата и синтаксиса read—terms (термин Prolog с последующим завершающим символом, состоящий из текста и точки).
Признаки — tuProlog позволяет динамично определять признаки (или свойства), которые описывают некоторые аспекты библиотек и их утверждения, и значимые функторы. Признак различается по имени (буквенно-цифровому атому), списку возможных значений, изначальному значению, и булевскому значению, которое показывает возможность изменения признака. Можно изменить значение признака (если есть такая возможность) динамично включив в список значений новое значение.
 
Признаки — tuProlog позволяет динамично определять признаки, которые описывают некоторые аспекты библиотек и их предикатов, и значимые функторы.
Библиотеки — tuProlog может быть динамично расширен за счет загрузки или выгрузки библиотек. Каждая библиотека предоставляет свой особый набор утверждений, функторов, совместимых теорий, которые делают доступными новые признаки и операторы. Библиотеки могут быть предустановленными или измененными пользователем. Библиотека может быть загружена посредством predicate load library (возможность Prolog), или method loadLibrary (возможность Java).
Признак различается по имени (буквенно-цифровому атому), списку возможных значений, изначальному значению, и булевскому значению, которое показывает возможность изменения признака. Можно изменить значение признака (если есть такая возможность) включив в список значений новое.
 
Библиотеки — tuProlog может быть расширен за счет загрузки или выгрузки библиотек.
На данный момент, tuProlog не поддерживает управление исключениями: в действительности, исключение делает утверждение и (или) функтор, в котором оно присутствует, ошибочным, что может привести к ошибке работы самой программы.
Каждая библиотека предоставляет свой особый набор предикатов, функторов и теорий, которые делают доступными новые признаки и операторы.
Библиотеки могут быть предустановленными или измененными пользователем.
Библиотека может быть загружена посредством predicate load library, или method loadLibrary.
 
На данный момент, tuProlog не поддерживает управление исключениями: в действительности, исключение делает предикат и/или функтор, в котором оно присутствует, ошибочным, что может привести к ошибке работы самой программы.
=== Встроенные утверждения ===
 
=== Встроенные предикаты ===
Данный раздел содержит список встроенных утверждений, которые содержатся в tuProlog.
 
Следуя традиции в описании встроенных аргументов (built-in argument Операция выполняется согласно следующему правилу description), которая уходит корнями в те далекие времена, где властвовала императивная интерпретация (imperative interpretation), символ “+” перед обозначает исходный аргумент, “-” обозначает итоговый аргумент, “?” обозначает исходный или итоговый аргумент, “@” обозначает исходный аргумент, который должен быть несвободным (связанным).
Данный раздел содержит список встроенных предикатов, которые содержатся в tuProlog.
 
В описании встроенных аргументов (built—in argument) операция выполняется согласно следующему правилу, символ “+” перед обозначает исходный аргумент, “-” обозначает итоговый аргумент, “?” обозначает исходный или итоговый аргумент, “@” обозначает исходный аргумент, который должен быть несвободным (связанным).
 
==== Управление настройками ====
 
• true/0
 
true - истина.
true — истина.
 
• fail/0
 
fail - ложь.
fail — ложь.
 
• ’,’/2
 
’,’(Первый аргумент, Второй аргумент) истинный только в том случае, если и первый и второй аргументы истинны.
’,’(Первый аргумент, Второй аргумент) истинно только в том случае, если и первый и второй аргументы истинны.
 
• !/0
 
! - истина. Удаляются все пункты выбора между сокращенной (the cut) и исходной (parent) задачей родителем цели. Результатом операции будет, использование текущего оператора и подстановок, используемых в сокращенной задаче.
! — истинно.
Удаляются все пункты выбора между сокращенной (cut) и исходной (parent) задачей цели.
Результатом операции будет, использование текущего оператора и подстановок, используемых в сокращенной задаче.
 
• ’$call’/1
 
’$call’(Goal) истинно тогда, когда задача (Goal) истинна. Это действие нельзя сократить.
’$call’(Goal) истинно тогда, когда задача (Goal) истинна.
Это действие нельзя сократить.
 
Операция выполняется согласно следующему правилу: call(+callable term(вызываемый термин))
 
• halt/0
 
halt завершает выполнение программы Prolog т возвращается к системе что вызвала процессор (processor).
halt завершает выполнение программы Prolog и возвращается к системе, которая вызвала процессор (processor).
 
• halt/1
 
halt(X) завершает выполнение программы Prolog т возвращается к системе что вызвала процессор, минуя значение X.
halt(X) завершает выполнение программы Prolog и возвращается к системе, которая вызвала процессор, минуя значение X.
 
Операция выполняется согласно следующему правилу: halt(+int)
 
Строка 291 ⟶ 318 :
 
• is/2
 
is(X, Y) истинно, если X можно объединить со значением выражения Y.
 
Операция выполняется согласно следующему правилу: is(?term, @evaluable)
 
• ’=’/2
 
’=’(X, Y) истинны, если X и Y объединяемы.
’=’(X, Y) истинно, если X и Y объединяемы.
 
Операция выполняется согласно следующему правилу: ’=’(?term, ?term)
 
• ’\=’/2
 
’\=’(X, Y) истинное, если X и Y нельзя объединить.
’\=’(X, Y) истинно, если X и Y нельзя объединить.
 
Операция выполняется согласно следующему правилу: ’\=’(?term, ?term)
 
• ’$tolist’/2
 
’$tolist’(Составное слово, Список) истинно, если Составное слово – составное термин, и Список – списковое представление составного слова, с именем первого элемента и другими аргументами, как другие элементы.
’$tolist’(Составное слово, Список) истинно, если Составное слово – составное термин, и Список – списковое представление составного слова.
Операция выполняется согласно следующему правилу: ’$tolist’(@struct, -list)
 
Операция выполняется согласно следующему правилу: ’$tolist’(@struct, —list)
 
• ’$fromlist’/2
 
’$fromlist’(Составное слово, Список) истинно, если Составное слово, объединяемо со списковой репрезентацией списка.
’$fromlist’(Составное слово, Список) истинно, если Составное слово, объединяемо со списковым представлением списка.
Операция выполняется согласно следующему правилу: ’$fromlist’(-struct, @list)
 
Операция выполняется согласно следующему правилу: ’$fromlist’(—struct, @list)
 
• copy term/2
 
copy term(Термин1, Термин2) истинно, если Термин2 объединяем с переименованной копией Термина1.
 
Операция выполняется согласно следующему правилу: copy term(?term, ?term)
 
• ’$append’/2
 
’$append’(Элемент, Список) истинно, если Список это список (List is a list), с легким намеком на Элемент прилагаемый к списку.
’$append’(Элемент, Список) истинно, если Список это список (List is a list).
 
Операция выполняется согласно следующему правилу: ’$append’(+term, @list)
 
Строка 315 ⟶ 362 :
 
• ’$find’/2
 
’$find’(Оператор,Список операторов (ClauseList)) истинно, если Список операторов является списком, а оператор оператором, при этом все операторы базы данных соответсвуют Оператору прикреплены к списку.
’$find’(Клауз, Список клаузов (ClauseList)) истинно, если Список клаузов является списком, а Клауз — клаузом, при этом все клаузы базы данных соответствующие Клаузу прикреплены к списку.
 
Операция выполняется согласно следующему правилу: ’$find’(@clause, @list)
 
• abolish/1
 
abolish(PI) полностью удаляет динамичное утверждение, соответсвующее Индикатору Утверждения (predicate indicator PI).
abolish(PI) полностью удаляет динамичный предикат, соответствующий Индикатору предиката (predicate indicator PI).
 
Операция выполняется согласно следующему правилу: abolish(@term)
 
• asserta/1
 
asserta(Оператор) истинно, при этом Оператор добавлен в начало базы данных.
asserta(Клауз) истинно, при этом Клауз добавляется в начало базы данных.
 
Операция выполняется согласно следующему правилу: asserta(@clause)
 
• assertz/1
 
assertz(Оператор) истинно, при этом Оператор добавлен в конец базы данных.
assertz(Клауз) истинно, при этом Клауз добавляется в конец базы данных.
 
Операция выполняется согласно следующему правилу: assertz(@clause)
 
• ’$retract’/1
 
’$retract’(Оператор) истинно, если база данных содержит по крайней мере один оператор объединенный с Оператором. При этом оператор удаляется из базы данных. Повторное выполнение операции не возможно.
’$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)
 
==== Управление операциями и признаками ====