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

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 130:
== Основы tuProlog ==
 
Данная глава повествует об основных элементах и структурах tuProlog, включая синтаксис, средства обеспечения (разработки) программ и встроенные утверждения (предикаты).
 
=== Структура tuProlog ===
 
TuProlog имеет ярусную структуру, где утверждения (предикаты) имеют 3 категории:
Встроенные утверждения (built-in predicates) — содержатся в любой версии tuProlog. Неважно, что изменяется во время работы программы, это не затрагивает количество и свойства встроенных утверждений.
 
Встроенные Предикаты (built—in predicates) — содержатся в любой версии tuProlog.
Библиотечные утверждения (library predicates) — загружаются в tuProlog посредством библиотеки tuProlog. Так как, библиотеки могут быть загружены и выгружены из tuProlog во время начальной загрузки ОС, или динамично во время работы. Набор библиотечных утверждений не фиксирован, и может варьироваться от одной версии к другой, даже в одной и той же версии они могут изменяться на всем протяжении работы с TuProlog. Библиотеки могут создаваться при совмещении кодов Java и Prolog. Библиотечные утверждения Prolog могут быть переписаны теоретическими утверждениями (theory predicates). Библиотечные утверждения и Java и Prolog не могут быть выгружены частично: если необходимо выгрузить одну библиотеку, то придется выгружать все библиотеки содержащие этот утверждение.
Встроенные утверждения (built-in predicates) — содержатся в любой версии tuProlog. Неважно, что изменяется во время работы программы, это не затрагивает количество и свойства встроенных утвержденийпредикатов.
 
Библиотечные предикаты (library predicates) — загружаются в tuProlog посредством библиотеки tuProlog.
Теоретические утверждения — загружаются в tuProlog с помощью теорий. Теории могут быть загружены и выгружены во время начальной загрузки ОС, или динамично во время работы, поэтому набор теоретических утверждений не фиксирован, и может варьироваться от версии к версии, даже в одной и той же версии они могут изменяться на всем протяжении работы с TuProlog.
Библиотеки могут быть загружены и выгружены из tuProlog во время загрузки ОС, или во время работы TuProlog.
Набор библиотечных предикатов не фиксирован, и может варьироваться от одной версии к другой, даже в одной и той же версии предикаты могут изменяться на всем протяжении работы.
Библиотеки могут создаваться при совмещении Java и Prolog.
Библиотечные предикаты Prolog могут быть переписаны теоретическими предикатами (theory predicates).
Библиотечные предикаты и Java и Prolog не могут быть выгружены частично — если необходимо выгрузить одну библиотеку, то придется выгружать все библиотеки содержащие этот предикат.
 
Теоретические предикаты — загружаются в tuProlog с помощью теорий.
Теории tuProlog – это сборник Prolog положений (clauses). Пусть они и похожи, но библиотечные и теоретические утверждения по-разному воспринимаются в tuProlog. Во-первых, теоретические утверждения должны аксиоматически представлять область знаний во время выдачи решения задачи (axiomatically represent domain knowledge at the time the proof is performed). Библиотечные утверждения должны представлять то, что требуется (процедурные знания (procedural knowledge), вспомогательные утверждения (utility predicates)) для получения достоверного и эффективного решения: библиотечные утверждения представляют “точные” знания, которые прочно зафиксированы в библиотеке.
Теории могут быть загружены и выгружены во время загрузки ОС, или во время работы.
Так как библиотечные и теоретические утверждения по-разному структурированы, они по-разному обрабатываются в TuProlog, и по-разному представлены в программе, во время ее работы: из этого следует, что они по-разному отображаются при мониторинге или отладке tuProlog. Набор инструментов разработчика, tuProlog IDE, разграничивает теории, аксиомы, утверждения и загруженные библиотеки. Фаза отладки, обычно пренебрегает библиотечными утверждениями (которые, как уже было сказано выше, задуманы как более устойчивые и тщательно проверенные), в то время как теоретические утверждения остаются на всем процессе работы.
Теоретические утверждения — загружаются в tuProlog с помощью теорий. Теории могут быть загружены и выгружены во время начальной загрузки ОС, или динамично во время работы, поэтому наборНабор теоретических утвержденийпредикатов не фиксирован, и может варьироваться от версии к версии, даже в одной и той же версии они могут изменяться на всем протяжении работы с TuProlog.
 
Теории tuProlog – это сборник Prolog клаузов (clauses).
=== Синтаксис tuProlog ===
Они похожи, но библиотечные и теоретические предикаты по—разному воспринимаются в tuProlog.
Во-первых, теоретические предикаты должны представлять область знаний во время выдачи решения задачи (axiomatically represent domain knowledge at the time the proof is performed).
Теории tuProlog – это сборник Prolog положений (clauses). Пусть они и похожи, но библиотечные и теоретические утверждения по-разному воспринимаются в tuProlog. Во-первых, теоретические утверждения должны аксиоматически представлять область знаний во время выдачи решения задачи (axiomatically represent domain knowledge at the time the proof is performed). Библиотечные утвержденияпредикаты должны представлять то, что требуется (процедурные знания (procedural knowledge), вспомогательные утвержденияпредикаты (utility predicates)) для полученияполучение достоверного и эффективного решения: библиотечные утвержденияпредикаты представляют “точные” знания, которые прочно зафиксированы в библиотеке.
 
Так как библиотечные и теоретические предикаты по-разному структурированы, они по-разному обрабатываются в TuProlog, и по-разному представлены в программе: из этого следует, что они по-разному отображаются при мониторинге или отладке tuProlog.
Синтаксис tuProlog в основном состоит из ISO совместимых (на данный момент ISO исключения, ISO I/O утверждения и некоторые ISO директивы не поддерживаются), и входит в состав некоторых элементов: комментариев и непечатаемых знаков. Непечатаемые знаки состоят из форм без содержания (включая табуляцию и перевод страницы), маркеров конца страницы, и комментариев. Непечатаемые знаки могут быть поставлены до и после термина, оператора, скобки или разделительного знака, но в том случае, если они не разбивают атом или число, или не разделяют функтор от открытой скобки, за которой следуют значения. Например, атом p(a,b,c) может быть записан в виде p( a , b , c ), но не как p (a,b,c)).
Набор инструментов разработчика, tuProlog IDE, разграничивает теории, аксиомы, предикаты и загруженные библиотеки.
Фаза отладки, обычно пренебрегает библиотечными предикатами (которые, как уже было сказано выше, задуманы как более устойчивые и тщательно проверенные), в то время как теоретические предикаты остаются на всем процессе работы.
 
=== Синтаксис tuPrologProlog ===
В TuProlog существует два типа комментариев: первый тип начинается с /* и заканчивается на */, второй тип начинается с % и заканчивается в конце строки (или предложения). Вложенные комментарии не поддерживаются.
 
Синтаксис tuProlog в основном состоит из ISO совместимых (на данный момент ISO исключения, ISO I/O предикаты и некоторые ISO директивы не поддерживаются), и некоторых элементов: комментариев и непечатаемых знаков.
Переменные — имя переменной начинается с заглавной буквы или подчеркивания (_), и состоит из букв, цифр, и/или подчеркиваний. Одиночное подчеркивание обозначает безымянную (анонимную) переменную.
 
Непечатаемые знаки состоят из форм без содержания (включая табуляцию и перевод страницы), маркеров конца страницы, и комментариев.
Непечатаемые знаки могут быть поставлены до и после термина, оператора, скобки или разделительного знака, но в том случае, если они не разбивают атом или число, или не разделяют функтор от открытой скобки, за которой следуют значения.
 
Например, атом p(a,b,c) может быть записан в виде p( a , b , c ), но не как p (a,b,c)).
 
В TuProlog существует два типа комментариев:
 
1. Начинается с /* и заканчивается на */
 
2. Начинается с % и заканчивается в конце строки.
 
Вложенные комментарии не поддерживаются.
 
Переменные — имя переменной начинается с заглавной буквы или подчеркивания ( _ ), и состоит из букв, цифр, и/или подчеркиваний. Одиночное подчеркивание обозначает безымянную (анонимную) переменную.
Одиночное подчеркивание обозначает безымянную (анонимную) переменную.
 
Атомы — существует 4 типа атомов:
 
I. Набор букв, цифр, и/или подчеркиваний, начинающихся с прописной буквыr.
 
II. Один или несколько символов {#, $, &, *, +, -, ., /, :, <, =, >, ?, @, ^, ~}, при условии, что атом не начинается с /*.
 
III. Специальные атомы [] и {}.
 
IV. Значение в одиночных кавычках.
 
Числа — представлены двумя типами — целые и дробные.
Числа — представлены 2 видами - целые и дробные. Форматы целых чисел: десятичные числа, двоичные (с префиксом 0b), восьмеричные (с префиксом 0o), и шестнадцатеричные (с префиксом 0x). Формат кода символа для целых чисел (с префиксами 0’) используется лишь с буквенно-цифровыми значениями, пробелами и символами {#, $, &, *, +, -, ., /, :, <, =, >, ?, @, ^, ~}. Диапазон значений целых чисел от -2147483648 до 2147483647; диапазон дробных от -2E+63 до 2E+63-1.
Форматы целых чисел: десятичные числа, двоичные (с префиксом 0b), восьмеричные (с префиксом 0o), и шестнадцатеричные (с префиксом 0x).
Дробные числа могут выражаться в форме экспоненты (-3.03E-05, 0.303E+13). Минус ставиться перед числом, таким образом, делая его отрицательным, минус – составная часть числа; -3.4 – это число, а - 3.4 - выражение.
Формат кода символа для целых чисел (с префиксами 0’) используется лишь с буквенно-цифровыми значениями, пробелами и символами {#, $, &, *, +, —, ., /, :, <, =, >, ?, @, ^, ~}.
Строка — набор символов ASCII, заключенных в одинарные ’ или двойные " кавычки. Если в предложении имеется одинарная кавычка, то в машинной записи она заменяется двойной (’don’’t forget’). Обратный слеш (\) в конце строки обозначает, что на следующей строке следует продолжение:
Диапазон значений целых чисел от —2147483648 до 2147483647; диапазон дробных от —2E+63 до 2E+63—1.
Дробные числа могут выражаться экспонентой (—3.03E—05, 0.303E+13).
Дробные числа могут выражаться в форме экспоненты (-3.03E-05, 0.303E+13). Минус ставиться перед числом, таким образом, делая его отрицательным, минус – составная часть числа; -3.4 – это число, а - 3.4 - выражение.
 
Строка — набор символов ASCII, заключенных в одинарные (’) или двойные (") кавычки.
Если в предложении имеется одинарная кавычка, то в машинной записи она заменяется двойной (’don’’t forget’).
Обратный слеш (\) в конце строки обозначает, что на следующей строке следует продолжение:
 
’this is \
an single line’ – это соответствует ’this is a single line’ , только без разрыва строки.
 
Также, обратный слеш может обозначать особые символы:
\n новая строка
 
\r возвращение без новой строки
 
\t табуляция
 
\\ обратный слеш
 
\’ одиночная скобка
 
\" двойная скобка
 
Составное слово — обычно они записываются в виде функторов (как и атомы), запись делается в круглых скобках, без пробелов, по необходимости отделенная запятыми: f(a,b,c).
Такой вид записи также характерен и для функторов, которые записаны в виде, 2+2 = ’+’(2,2).
Списки определяются как вложенные структуры (rightward-nested structures), сделанные с использованием оператора ’.’; например:
 
[a] = ’.’(a,[])
[a,b] = ’.’(a,’.’(b,[]))
[a,b|c] = ’.’,(a,’.’(b,c))
 
Может использоваться только одна | в списке, без запятых после нее. Фигурные скобки также возможны: любой термин, заключенный в {} обрабатывается как аргумент специального функтора ’{}’:
Может использоваться только одна (|) в списке, без запятых после нее.
Может использоваться только одна | в списке, без запятых после нее. Фигурные скобки также возможны: любойЛюбой термин, заключенный в {} обрабатывается как аргумент специального функтора ’{}’:
 
{hotel} = ’{}’(hotel), {1,2,3}=’{}’(1,2,3).
 
Операторы — характеризуются именем, спецификатором (specifier) и приоритетом.
Имя оператора представляет собой атом, который не является двусмысленным: т.е. один и тот же атом может выступать в роли оператора в различных классах, как и с использованием инфиксов и префиксов знака минус.
Спецификатор оператора - это строка,; например xfy, которая показываетвыступает как класс (инфикс, постфикс и префикс) так и, ассоциативность: xfy показывает, что первым делом выполняется группирование справа (grouping on the right), yfx - слева, xfx – без разницы.
Приоритет оператора – неотрицательное целочисленное значение от 0 (максимальный приоритет) до 1200 (минимальный).
 
Операторы могут быть определены как op утверждениепредикат (Приоритет, Спецификатор, Имя) или: - op (Приоритет, Спецификатор, Имя).
Предопределенные операторы не входят в состав стандартной версии tuProlog, и их количество определяется библиотеками.
 
Запятые — запятая выполняет три функции: она разделяет

1. Разделяет аргументы функторов, она разделяет

2. Разделяет элементы списков, и она выступает

3. Выступает как инфиксный оператор с приоритетом 1000. Так как (a,b) (без функтора в начале) является составным словом, аналогичным ’,’(a,b).
 
Круглые скобки – они могут использоваться с любым термином.
Значение скобок - в упорядочении записи, они не дают нарушать порядок выполнения операций.
Необходимо помнить, что операторы, заключенные в круглые скобки не выступают более в роли операторов; так 2(+)3 – это является синтаксической ошибкой.
 
=== Настройка tuProlog ===