TuProlog: различия между версиями
Содержимое удалено Содержимое добавлено
Нет описания правки |
Нет описания правки |
||
Строка 130:
== Основы tuProlog ==
Данная глава повествует об основных элементах и структурах tuProlog, включая синтаксис, средства
=== Структура tuProlog ===
TuProlog имеет ярусную структуру, где
Встроенные утверждения (built-in predicates) — содержатся в любой версии tuProlog. Неважно, что изменяется во время работы программы, это не затрагивает количество и свойства встроенных утверждений.▼
Встроенные Предикаты (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 – это сборник Prolog клаузов (clauses).
=== Синтаксис tuProlog ===▼
Они похожи, но библиотечные и теоретические предикаты по—разному воспринимаются в tuProlog.
Во-первых, теоретические предикаты должны представлять область знаний во время выдачи решения задачи (axiomatically represent domain knowledge at the time the proof is performed).
▲
Так как библиотечные и теоретические предикаты по-разному структурированы, они по-разному обрабатываются в TuProlog, и по-разному представлены в программе: из этого следует, что они по-разному отображаются при мониторинге или отладке tuProlog.
Набор инструментов разработчика, tuProlog IDE, разграничивает теории, аксиомы, предикаты и загруженные библиотеки.
Фаза отладки, обычно пренебрегает библиотечными предикатами (которые, как уже было сказано выше, задуманы как более устойчивые и тщательно проверенные), в то время как теоретические предикаты остаются на всем процессе работы.
Синтаксис 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. Значение в одиночных кавычках.
Числа — представлены двумя типами — целые и дробные.
Форматы целых чисел: десятичные числа, двоичные (с префиксом 0b), восьмеричные (с префиксом 0o), и шестнадцатеричные (с префиксом 0x).
Дробные числа могут выражаться в форме экспоненты (-3.03E-05, 0.303E+13). Минус ставиться перед числом, таким образом, делая его отрицательным, минус – составная часть числа; -3.4 – это число, а - 3.4 - выражение.▼
Формат кода символа для целых чисел (с префиксами 0’) используется лишь с буквенно-цифровыми значениями, пробелами и символами {#, $, &, *, +, —, ., /, :, <, =, >, ?, @, ^, ~}.
Диапазон значений целых чисел от —2147483648 до 2147483647; диапазон дробных от —2E+63 до 2E+63—1.
Дробные числа могут выражаться экспонентой (—3.03E—05, 0.303E+13).
▲
Строка — набор символов 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) и приоритетом.
Имя оператора Спецификатор оператора Приоритет оператора – неотрицательное целочисленное значение от 0 (максимальный приоритет) до 1200 (минимальный). Операторы могут быть определены как op
Предопределенные операторы не входят в состав стандартной версии tuProlog, и их количество определяется библиотеками.
Запятые — запятая выполняет три функции:
1. Разделяет аргументы функторов 2. Разделяет элементы списков 3. Выступает как инфиксный оператор с приоритетом 1000. Так как (a,b) (без функтора в начале) является составным словом, аналогичным ’,’(a,b). Круглые скобки
Значение скобок Необходимо помнить, что операторы, заключенные в круглые скобки не выступают более в роли операторов; так 2(+)3 – === Настройка tuProlog ===
|