Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Глава 8. БИБЛИОТЕКА ДОПОЛНИТЕЛЬНЫХ ФУНКЦИЙ
Дополнительные функции расширяют возможности системы как в части
языка представления знаний, так и в части дополнительных системных
возможностей. Все функции поставляются в виде исходных кодов на языке
Лисп и образуют секции в файле LOTALIB.LSP.
Для использования функции:
- найдите соответствующую секцию в файле LOTALIB.LSP;
- скопируйте ВЕСЬ текст секции в любой файл <filename>;
- запустите ЛОТА ПЛЮС из интерпретатора muLisp;
- выберите в главном меню режим "Интерпретатор";
- наберите команду:
(add-library <filename>)
Дополнительные функции будут загружены, и созданные новые версии
файлов LOTA.EXE и LOTA.SYS будут содержать их в ядре системы.
Для включения дополнительных функций в компилируемые с помощью LOCOMP.EXE
прикладные базы знаний необходимо:
- как и в предыдущем случае, скопировать требуемый текст в файл <filename>;
- добавить ПОСЛЕДНЕЙ СТРОКОЙ в файл LOTA.ENV команду загрузки созданного
файла:
(load <filename>)
- запустить компилятор LCOMP.EXE для компиляции прикладной базы знаний с
измененным файлом LOTA.ENV.
Полученная прикладная база знаний будет содержать дополнительные функции.
Если Вы приобрели комплектацию Developer с исходными текстами, мы
рекомендуем другой способ:
- перенесите требуемый исходный текст в файл ADDLIB.LSP;
- выполните LOTGEN.BAT для генерации новых версий LOTA.SYS и LOTA.EXE,
включающих дополнительные функции;
- выполните COMPGEN.BAT (если необходимо) для генерации новой версии
компилятора LCOMP.EXE.
Это - единственный способ получения новой версии компилятора баз знаний.
Секции LOTALIB.LSP описываются далее в этой главе.
8.1. Поддержка значений типа *ANY*
Значение *ANY* для параметра соответствует отсутствию ограничений на
область возможных значений параметра. Функции этой секции заменяют
стандартные функции ЛОТА ПЛЮС с этими же именами ддля поддержания
верного выполнения теоретико-множественных и других операций.
++ Объединение. Если хотя бы один из операндов имеет значение *ANY*,
результат - *ANY*;
** Пересечение. Если один из операндов *ANY*, результат совпадает со
вторым операндом;
now-includes AD-HOC включение. *ANY* включает любоу значение, и
входит только в *ANY*;
now-out-of AD-HOC разделение. Если хотя бы один из операндов - *ANY*,
результат - NIL.
8.2. Дополнительные строковые функции
rtoupper (ch) - переводит символ CH в верхний регистр с учетом
кириллических символов (альтернативная кодировка);
rtolower (ch) - то же для нижнего регистра;
string-tail (str n) - возвращат строку, состоящую из N последних
символов строки STR;
replace-string (str old new) - заменяет вхождения подстроки OLD в строке
STR на подстроку NEW;
parse-string (str) - разбивает строку STR на список слов и возвращает этот
список;
whitespace (ch) - возвращает T, если CH - "белый пробел".
8.3. Неструктурированный (текстовый) редактор
Этот простой редактор предназначен для редактирования текстовых файлов и
используется в том случае, если Вы работает с встроенным редактором баз
знаний, и в то же время хотите редактировать файлы программ. Размер
редактируемого файла ограничен величиной MAX-EDIT байтов. По умолчанию
MAX-EDIT равно 50000.
Synopsis: (edit-text-file <filename> [<w-descr>])
<w-descr> описывает окно (см. 6.2.3). Если описание не задано, используется
*USER-WINDOW*.
Фунции редактора - такие же, как и у структурного (см.гл.5), за
исключением специальных. Добавлена функция "SAVE AS" (<F5>).
8.4. Поддержка мыши
Мышь может использована для управления меню следующим образом:
- для подсветки пункта меню, поставьте курсор мыши на этот пункт и
нажмите ЛЕВУЮ кнопку;
- для выбора пункта меню, поставьте на него курсор мыши и нажмите ЛЕВУЮ
кнопку ДВАЖДЫ;
- ПРАВАЯ кнопка мыши заменяет клавишу ESC.
8.5. Интенсионал
Так называемый интенсионал создает множество, состоящее из элементов,
удовлетворяющих указанным условиям.
Synopsis: ((<var> from <S-exp>) such-that <L-exp>)
Возвращает подмножество элементов из множества, заданного
выражением <S-exp>, таких, что для них выполняется (истинно) логическoe
выражение <L-exp>. <var> указывает имя переменной, используемое при описании
<L-exp> и "пробегает" все элементы множества <S-exp>.Тип возвращаемого мно-
жества совпадает с типом <S-exp>.
ВНИМАНИЕ! Имя элементной переменной должно отличаться от всех используе-
мых в программе имен, поэтому лучше всего использовать имена, начинающиеся с
литеры "_". Это гарантирует Вас от пересечений с внутренними переменными Ло-
ты. Допустимо также использовать букву "Х" с ЦИФРОЙ после нее.
Пример: ((_x из '(1 2 3 4 5)) такие-что (> _x 3)) ==> (4 5)
8.6. Кванторы
Квантор существования (модальный)
Synopsis: (There-is (<var> from <S-exp>) <L-exp>)
<var> определяет имя элементной (индивидной) переменной, которая
пробегает все элементы из <S-exp>. Предикат возвращает
T, если (Ex) из I(<S-exp>) такой, что (при его подстановке) <L-exp>=T,
TF, если (Ex) из P(<S-exp>) такой,что <L-exp>=TF,
NIL, если (Ax) из P(<S-exp>) выполняется <L-exp>=NIL.
Пример: (Parameter atest (domain . '(a b c d)))
(There-is (x from '(a b c d)) (x same-as a)) ==> T
(Существует (x из atest) (x совпадает-с a)) ==> TF
(Ther-is (x from atest) (x same-as e)) ==> NIL
Квантор всеобщности (модальный)
Synopsis: (Any (<var> from <S-exp>) <L-exp>)
Возвращает T, если (Ax) из P(<S-exp>) выполняется <L-exp> = T,
TF, если (Ax) из I(<S-exp>) выполняется <L-exp> = TF или Т,
иначе - NIL.
Пример: (Parameter stest (type . seq)(domain . '(1 2 3 4 5)))
(Any (x from '(1 2 3 4 5)) (> x 2)) ==> NIL
(Any (x from atest) (> x 2)) ==> TF
(Any (x from atest) (> x 0)) ==> T
Квантор существования (ad-hoc предикат)
Synopsis: (Now-there-is (<var> from <S-exp>) <L-exp>)
Пример: (Parameter atest (domain . '(a b c d)))
(Now-there-is (x from atest) (x same-as e)) ==> NIL
Квантор всеобщности (ad-hoc предикат)
Synopsis: (Now-any (<var> from <S-exp>) <L-exp>)
Пример: (Parameter atest (type . seq)(domain . '(1 2 3 4 5)))
(Now-any (x from atest) (> x 2)) ==> NIL
(Now-any (x from atest) (> x 0)) ==> T
8.7. BTRIEVE (tm) интерфейс
Для использования BTRIEVE совместно с ЛОТА ПЛЮС необходимо добавить эту
секцию кода к ядру системы. Затем перед каждым сеансом необходимо:
- запустить BTRIEVE.EXE (резидентно),
- запустить LOTABTRV.EXE (это - также резидентная программа),
- начать работу с ЛОТА ПЛЮС,
- набрать команду SET-BTRV из ЛОТА ПЛЮС.
Функция SET-BTRV:
Synopsis: (set-btrv)
После этого можно использовать команды BTRIEVE. Вызов BTRIEVE из ЛОТА ПЛЮС
имеет следующий синтаксис:
Synopsis: (btrv <op> <pos-blk> <buf-len> [<key-num>][<key-buf>][<data-buf>])
op код операции - Lisp-число
pos-blk BTRIEVE POS_BLK
buf-len длина буфера данных - Lisp-число
key-num номер ключа - Lisp-число
key-buf буфер ключа (если требуется)
data-buf буфер данных
Функция BTRV возвращает BTRIEVE статус (целое LISP-число). Если результат
операции содержится в буфере данных или буфере ключа BTRIEVE. Для их
получения используйте функции GET-BT-DATABUF и GET-BT-KEYBUF соответственно.
Некоторые операции BTRIEVE возвращают информацию POS-BLK (FCB). Для ее
получения используется функция GET-BT-FCB.
Synopsis: (get-bt-databuf)
(get-bt-keybuf)
(get-bt-fcb)
Эти функции возвращают соответствующие значения в виде строк.
Допускается использование всех операций BTRIEVE (v5.0 или старше) со
следующими ограничениями:
- максимальная длина записи 7500 байт;
- максимальная длина ключа 254 байт;
- максимальное число ключей 22.
8.8. Логический вывод, управляемый целью (двунаправленный)
Вывод, управляемый целью, заставляет систему проверять те правила,
опрашивать те переменные, вызывать те подцели, котрые, по ее мнению, могут
привести к достижению цели в текущей ситуации. Цель в ситуации - добиться
выполнения операции Success или Fail. Алгоритм работы можно понять, изучив
исходные тексты функций этой секции, снабженные полными комментариями.
Для использования этого механизма вывода, необходимо описать слот
"INFERENCE" ситуации следующим образом:
(INFERENCE . (goal-driven))
8.9. Компрессия прецедентов
Алгоритм компрессии прецедентов уменьшает количество прецедентов без
потери информации. Это означает, что вывод по аналогии (см. гл.5) будет
давать одни и те же результаты как с исходным, так и с компрессированным
множеством прецедентов при любом текущем состоянии консультации.
После загрузки функций этой секции в меню "РедОпций" (Редактор БЗ)
появится новый пункт - сжатие прецедентов. В случае, если выполнение этой
процедуры дало реальные результаты, система предложит сохранить "сжатое"
множество в файле на диске. Предупреждаем, что система может образовать
новые прецеденты (и дать им новые имена по своему усмотрению) и/или изменить
содержимое текущих.
Алгоритм разработан к.ф.-м.н. Е.А.Печерским.
8.10. Поиск ближайшего прецедента
Позволяет выбрать прецедент, наиболее близкий (по некотрой метрике) к
текущему состоянию консультации, и затем проводит с ним аналогию (см. гл.5).
Synopsis: (find-closest)
Метрика предложена к.ф.-м.н. Е.А.Печерским.
8.11. Интерфейс с деловой графикой
Вывод на экран гистограммы или круговой диаграммы
Synopsis: (chart <filename> <S-exp>)
Выводит на экран график, шаблон которого описан в файле <filename>, числовые
данные для построения графика должны содержаться во втором операнде (<S-exp>),
который должен представлять собой последовательность чисел. Если
последовательность длиннее, чем это предусмотрено в шаблоне, последние числа
игнорируются; если же короче - последовательсноть дополняется нулями до
требуемой в шаблоне длины. Правила построения шаблонов графиков приведены в
пункте 7.4.
8.12. Использование собственных дополнительных функций
В качестве дополнительных функций также могут быть использованы любые
разработанные пользователем на языке muLISP87(tm) функции. Процесс
подключения их к системе - точно такой же, как и для функций из библиотеки
дополнительных функций._