Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

сываемые элементы это параметры ситуации и правила

Работа добавлена на сайт samzan.net:


      Глава 6. ЯЗЫК ПРЕДСТАВЛЕНИЯ ЗНАНИЙ ЛОТЫ

     Язык представления знаний Лоты служит для описания знаний, используемых

при консультации, и для описания самого процесса консультации. Основные опи-

сываемые элементы - это параметры, ситуации и правила. Каждый такой объект

обладает набором слотов, характеризующих различные его свойства. В свою

очередь, слоты состоят из элементарных единиц языка представления знаний,

разделяемых на константы, выражения и действия. Приводимые в описаниях

примеры используют параметры, ситуации и т.п. из базы знаний VACAT.LKB.

     6.1. Константы

    Константы <const> в Лоте предназначены для описания отдельных, неделимых

элементов.

     Предусмотрены константы трех типов: числовые <n>, символьные <с> и логи-

ческие <log>.

     ЧИСЛОВЫЕ константы представляют собой привычную запись действительного

числа, например: 3 -12.35 .

     СИМВОЛЬНЫЕ константы аналогичны строковым константам Си или Лиспа. Как

правило, они должны быть записаны в двойных кавычках. Допускается запись

именных констант без кавычек, в этом случае они не могут содержать пробелов и

символов , ; ( ) ] | \. Вместо двойных кавычек можно использовать символ |.

Отметим, что сравнение двух констант, содержащих одинаковые последовательности

символов, записанных по-разному (т.е. одна - в кавычках, другая - без), может

дать отрицательный результат. Существуют некоторые ограничения на использование

специальных символов: символы " и  \ могут использоваться только внутри кавычек

и при этом должны экранироваться символом \.  Использование символа | в именных

константах недопустимо. Используемое иногда в документации обозначение <text>

также представляет собой частный случай "закавыченной" символьной константы.

  Примеры:      это-константа  " Это - тоже "

     ЛОГИЧЕСКИЕ константы - значения истинности в логике Лоты: T (НЕОБХОДИ-

МО), TF (ВОЗМОЖНО), NIL (НЕВОЗМОЖНО).

    Кроме того, имеются специальная константа для обозначения пустого множес-

тва - NIL и константа ПУСТАЯ СТРОКА - *NUL-STRG* (символьного типа).

     6.2. Выражения

     Выражения в Лоте разделяются на элементные и множественные, а также по

типам: символьные, числовые (дискретные и интервальные), табличные.

     6.2.1. Элементные выражения

     Элементные выражения <e-exp> могут представлять собой константу соответ-

ствующего типа или результат операции Лоты, возвращающей элементное значение.

В документации элементные выражения определенного типа обозначаются следующим

образом:

     <num>  - числовое выражение;

     <str>  - символьное выражение.

     Все логические выражения Лоты <L-exp> также по существу являются элемен-

тными, но ввиду их особой роли они рассматриваются отдельно.

     6.2.2. Множественные выражения

     Как уже отмечалось, значениями параметров в Лоте служат множества. Боль-

шинство выражений языка представления знаний Лоты также оперирует множества-

ми, и потому множественные выражения (<S-exp>) - наиболее употребимые.

    В соответствии с концепцией Лоты каждое множественное выражение может

рассматриваться с двух точек зрения.

   Во-первых, существуют элементы, которые входят в множество наверняка, то

есть значение предиката "принадлежит множеству" для них НЕОБХОДИМО. Множество

этих элементов называется необходимой частью и обозначается в документации

I(<S-exp>). Множества, "сконструированные" из констант (константные), с необ-

ходимостью включают все свои члены, а множества значений параметров в настоя-

щей версии не включают с необходимостью ни одного элемента, и потому для зна-

чения параметра I(<S-exp>) пусто.

   Во-вторых, существуют элементы, которые ВОЗМОЖНО принадлежат множеству

значений данного выражения, то есть значения предиката "принадлежит множест-

ву" для них ВОЗМОЖНО или НЕОБХОДИМО. Эта часть называется возможным значением

и обозначается в документации P(<S-exp>). Понятно, что возможное значение

всегда включает нобходимую часть, т.е. I(<S-exp>) << P(<S-exp>), где знак <<

обозначает теоретико-множественное отношение включения. Для выражений, сконс-

труированных из констант, P(<S-exp>) совпадает с I(<S-exp>), для параметра

P(<S-exp>) совпадает со множеством возможных значений, а I(<S-exp>) пусто.

     Предусмотрены множественные выражения следующих типов:

     <Sym>    - символьный (конечное множество символьных элементов).Для

обозначения множества, составленного из констант a,b,.., c в Лоте используется

запись '(a b ... c), например: '(лето зима межсезонье);

     <Seq>    - дискретный (конечное множество числовых элементов);

     <Interv> - интервальный (числовой интервал, определяемый двумя граничными

значениями). Для представления интервала с нижней границей m и верхней n

используется запись '(m . n), например '(1 . 14);

     <Tab>    -  табличный (множество записей реляционной таблицы).Табличное

выражение может представлять собой указание на используемую таблицу на диске -

- (table <имя файла>) или представление виртуальной таблицы в следующей форме:

(table NIL (<описание-поля>...) <длина записи> (<запись1> ...  <запись_n>)).

    Описание-поля имеет вид (<имя-поля> <длина> <тип>).

    ИМЯ-ПОЛЯ подчиняется обычным ограничениям на идентификаторы, однако мы

настоятельно рекомендуем не делать его длиннее, чем само поле;

   ДЛИНА определяет число байтов, отводимое под поле на экране. Отметим, что

Лота допускает хранение более длинных, чем это указано в описании, полей и

обрезает их только при выводе на экран;

   ТИП указывает характер данных, которые могут вводиться в данное поле. До-

пустимы следующие обозначения: C - символьное поле; N - числовое поле (допус-

кается использование десятичной точки и знака); L - оцениваемое поле (Лисп-

поле). Занесенная в это поле информация обрабатывается:  последовательность

цифр будет трактоваться как число, последовательность символов - как символьная

константа без скобок (см. п.3.2). Допустимо в данном поле и задание множества

значений, для этого оно должно быть заключено в скобки и предварено символом ',

например: '(лето зима межсезонье).  Все операции с такими полями выполняются

намного медленнее, чем с первыми двумя типами.

   В системе имеются операции превращения таблицы на диске в виртуальную

(загрузка в оперативную память) и сохранения виртуальной таблицы на диске.

   Примеры:

таблица на диске: (table vacat.ltb)

виртуальная таблица:

(table NIL ((Сезон 25 L)(место 15 C)) 40 ((лето Подмосковье) (зима Карпаты)

             ((лето зима межсезонье) Пятигорск) ) )

     В случае, если допустимо множественное выражение любого типа, использу-

ется обозначение <S-exp>.

     Любое элементное выражение является частным случаем множественного выра-

жения того же типа; числовое выражение может считаться частным случаем как

дискретного, так и интервального типа.

    Выражения образуются также в результате операций над константами, пара-

метрами и переменными. Их значения - результат операций, и для удобства мы

будем иногда использовать термины "выражения" и "операции" как синонимы.

     Кроме этого, выражения могут быть представлены именем параметра соответ-

ствующего типа (обозначается <param-name>). Значением такого выражения служит

текущее множество возможных значений параметра. Здесь, однако, имеется одно

важное отличие. Все элементы такого множества входят в него не "наверняка", а

лишь "возможно". Поэтому, например, результатом логической проверки вхождения

некоторого элемента х в множество значений параметра А может быть только НЕ-

ВОЗМОЖНО (если х не принадлежит множеству возможных значений А) или ВОЗМОЖНО

(если х входит в это множество). Это распространяется и на выражения, исполь-

зующие значения параметров в качестве "подвыражений". БУДЬТЕ ВНИМАТЕЛЬНЫ при

формулировании посылок правил, так как значение ВОЗМОЖНО не приводит к испол-

нению заключения правила!

     6.2.3 Описание окон

Описание окна (<w-descr>) в Лоте имеет следующий формат:

    (list <n-bkg> <n-frg> <r-bkg> <r-frg> <x0> <y0> <h> <w> [<text>])

    или

    '(<n-bkg> <n-frg> <r-bkg> <r-frg> <x0> <y0> <h> <w> [<text>])

Четыре первых числа определяют цвета: фон и передний план для основного и

"реверсивного", или выделенного, режима. Следующие два - строку и столбец

верхнего правого угла окна; далее - высота и ширина окна. Последний

(необязательный) параметр задается, если окно должно быть обрамлено. При этом

указанный текст используется в качестве заголовка окна. Для того, чтобы

получить обрамленное окно без заголовка, операнд <text> может имеь вид "".  В

Лоте имеются предварительно описанные окна. Их имена (см. Приложение 6) можно

использовать вместо явных описаний окон. Используется стандартная кодировка

цветов числами:  0 - черный, 1 - синий, 2 - зеленый, 3 - голубой, 4 -желтый, 5

- красный, 6 - фиолетовый, 7 - белый.

    Если необходимо вывести несколько выражений в одном окне, то все их можно

объединить в одном выражении, используя операцию list. Действие Display

позволяет выводить на экран как текст, так и значения любых выражений, в том

числе текущие значения параметров. Единственное исключение - табличные

выражения.  Они выводятся на экран действием report (см.п.4.3). Печатая

выражения, действие Display пропускает скобки. Если скобки необходимо печтать,

то нужно указать четвертый операнд действия - любое выражение или константу,

отличную от NIL.

     6.3. Операции

    6.3.1. Базовые операции

     Базовые операции применимы к любым множественным выражениям. В результа-

те они возвращают множественные выражения, как правило, того же типа, что и

их аргументы. Для всех операций требуется совпадение типов операндов.

     Объединение

     Synopsis: (<S-exp1> ++ <S-exp2> [++ <S-exp3> ...])

Возвращает объединение операндов. Для выражений символьного и дискретного типа

допустимо использование в качестве операндов элементных выражений.

Примеры:

       ('(a b c d) ++ '(d c e f))  ==> (a b c d e f)

       ('(a b) ++ c) ==> (a b c)

     Пересечение

     Synopsis: (<S-exp1> ** <S-exp2> [** <S-exp3> ...])

Возвращает теоретико-множественное пересечение операндов. Для выражений

символьного и дискретного типа допустимо использование в качестве операндов

элементных выражений.

Примеры:

       ('(a b c d) ** '(d c e f))  ==> (c d)

       ((cons 1 2) ** (cons 1.5 4))  ==> (1.5 . 2)

      Разность множеств

      Synopsis : (<S-exp1> -- <S-exp1>)

Возращает теоретико-множественную разность операндов. Для выражений интер-

вального типа недопустимо.

Пример:  ('(a b c d) -- '(d c e f))  ==> (a b)

      6.3.2. Операции над интервалами

    Поэлементная сумма

    Synopsis  : (<interval1> + <interval2>)

   Суммой двух интервалов (a,b) и (c,d) называется интервал (a+c,b+d). Допус-

тимо использовать вместо любого интервала число. Если оба опреанда - числа,

то операция совпадает с обыкновенным сложением.

Пример:  ('(1 . 2) + '(1.5  . 4)) ==> (2.5 . 6)

     Поэлементная разность двух интервалов

    Synopsis: (<interval1> - <interval2>)

Разностью двух интервалов (a,b) и (c,d) называется интервал (a-d,b-c).

Пример: ('(1 . 2) - '(1.5  . 4)) ==> (-3 . 0.5)

     Умножение

 Synopsis: (<num> * <interval>)

Поэлементное умножение интервала на число. Если второй операнд - также число,

то операция совпадаетс обычным умножением.

Пример:   (2 * '(7 . 10)) ==> (14 . 20)

      6.3.3. Конструкторы

     Выражения-конструкторы предназначены для получения новых множеств или

элементных выражений. При этом "исходный материал" может быть как записан в

тексте базы знаний, так и запрошен в диалоге у пользователя во время консуль-

тации.

     List

Создает множество символьного типа из явно перечисленных элементных выражений.

  Synopsis: (list <str1> ...)

Допустима также запись '(<str1> ...)

Пример:  (list a b c d) ==> (a b c d)

      Cons

Создает числовой интервал, лежащий между первым и вторым числом.

  Synopsis: (cons <num1> <num2>)

  Допустима также запись '(<num1> . <num2>).

  Пример: '(3 . 10) ==> (3 . 10)

      Get-interval

Приглашает пользователя ввести с экрана пару чисел, воспринимаемых как левая

и правая границы интервала, и создает (возвращает) интервал, ограниченный

этими числами.

      Synopsis: (Get-interval [<chk-interv>]<w-descr>[<prompt> <p-wind>])

 <chk-interv> задает границы (включающий интервал), внутри

которого должен лежать задаваемый интервал; <w-descr> - описание окна, в

котором будет производиться ввод; <prompt> - текст, который может быть выведен

перед запросом (приглашение), <p-wind> - описание окна, в котором будет выведе-

но приглашение.  Структура описания окна приводится в п.4.5.5.

 Пример:

(Get-interval '(3 . 15) '(7 0 7 10 10 20 50) "Укажите диапазон" *text-window*)

      Ask-num

Приглашает ввести число с клавиатуры и возвращает его.

      Synopsis: (ask-num [<num>])

 <num> позволяет ввести "значение по умолчанию", которое выводится на экран в

виде приглашения. Если пользователь нажмет <Enter>, то данное число будет

рассматриваться как введенное с клавиатуры.

Пример: (Ask-num 5)

      Ask-string

Приглашает ввести с клавиатуры символьную константу. Константа вводится без

кавычек, но в дальнейшем рассматривается как введенная в кавычках.

      Synopsis: (ask-string [<prompt><w-descr>][<default>])

<prompt> печатается в виде приглашения ко вводу и НЕ РАССМАТРИВАЕТСЯ как зна-

чение по умолчанию. Если сразу после приглашения пользователь нажмет <Enter>

или <Esc>, то введена будет ПУСТАЯ СТРОКА.  Если задано описание окна, то ввод

производится в нем. Иначе - в текущем окне.  Если задано значение по умолчанию

(default), то оно также распечатывает- ся при вызове действия и будет введено,

если нажать сразу клавишу <Enter>, или (даже после редактирования) клавишу

<Esc>.

Пример: (Ask-string "Please, enter file name:")

        (Ask-string "Save to file: " '(0 7 7 0 0 0 10 60 'f) file-name)

      Ask-lisp

Приглашает ввести с клавиатуры логическую константу или константу без кавы-

чек. Введенная строковая константа в дальнейшем будет представлена БЕЗ КАВЫ-

ЧЕК, поэтому при вводе необходимо быть осторожным. Отметим, что эта функция

работает медленно и везде, где это возможно, должна быть заменена на

ask-string или ask-y/n

      Synopsis: (ask-lisp [<prompt>][<w-descr>])

    Если задано описание окна, то ввод производится в нем. Иначе - в текущем

окне.

Пример: (Ask-lisp "Enter expression")

      Ask-Y/N

Приглашает пользователя ввести логическое значение ИСТИНА или ЛОЖЬ с клавиа-

туры в виде ответа на вопрос системы.

      Synopsis: (ask-y/n <prompt> [<window>])

      <prompt> - текст вопроса, который система автоматически дополнит спис-

ком возможных ответов - ("Да" и "Нет"), представленным в виде меню. Можно

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

но не задано, то будет использовано окно аварийных сообщений (строки 23-24 на

красном фоне). Операция возвращает ЛОГИЧЕСКИЕ ЗНАЧЕНИЯ (T при ответе "Да" и

NIL при ответе "Нет"). Если Вам необходимо получить модальное логическое зна-

чение, то приходится пользоваться функцией ask-lisp. Пример:

 (Ask-y/n "Вы согласны?")

      Get-list

Приглашает ввести символьное множество в диалоге.

     Synopsis: (Get-list <window>[<prompt>][<p-window>])

     Система рисует на дисплее окно и ожидает ввода последовательности строк

в этом окне. Если задано приглашение (<prompt>), то оно предварительно выво-

дится на экран в окне <p-window>. Каждая строка (до нажатия <Enter>) считает-

ся элементом создаваемого множества. Константы вводятся без двойных кавычек,

однако в полученном множестве они всегда представлены так, как будто

введены в кавычках. Окончание ввода - при нажатии <Enter> или <Esc> в начале

новой строки.

Пример: (Get-list '(0 7 7 0 4 10 10 39))

     Get-from-menu

Приглашает ввести символьное множество, выбрав его элементы из списка, пред-

ставленного в виде меню.

     Synopsis: (Get-from-menu <menulst> <w-descr> [<prompt>] [<p-wind>])

     <menulst> задает список, используемый в качестве меню в окне <w-descr>.

Значение необязательных операндов <prompt> и <p-wind> такое же, как и в ос-

тальных операциях - конструкторах.

Пример: (Get-from-menu '(a b c d) '(7 0 0 7 10 10 10 20) "Test a function"

                        '(0 7 0 7 0 0 2 70))

     Ask-from-menu

Приглашает ввести символьный элемент, выбрав его из списка, представленного

в виде меню.

     Synopsis: (Ask-from-menu <menulst> <w-descr> [<prompt>] [<p-wind>])

     <menulst> задает список, используемый в качестве меню. Значение необяза-

тельных операндов <prompt>, <p-wind> и <w-descr> такое же, как и в остальных

операциях - конструкторах.

Пример: (Ask-from-menu '(a b c d) '(7 0 0 7 10 10 10 20) "Test a function"

                        '(0 7 0 7 0 0 2 70))

      6.3.4. Операции базы данных

     Определение таблицы на диске

 Создает файл таблицы на диске в текущей директории, записывает заголовок

(структуру записи - описание полей в записи и ее длину) и возвращает описание

таблицы.

     Synopsis: (define-table <filename> [<tab-header>])

<filename> задает имя файла; <tab-header> - описания полей (см.п.4.1). Если

<tab-header> не задано, система предлагает задать опеределение таблицы в

диалоге.  Виртуальные таблицы не нуждаются в предварительном  пределении.

Пример:

   (define-table v1.ltb '((место 20 С)(Основное_занятие 15 C)(Сезон 20 L)))

   Добавление записи к таблице

Добавляет заданную запись к таблице (виртуальной или дисковой)

   Synopsis: (attach <tab> <rec>)

Пример:

  (attach (table vacat.ltb) '(Геленджик купание_в_море '(лето межсезонье)))

к таблице vacat.ltb будет добавлена запись со значением поля "место" - Геленд-

жик, "Основное_знаятие" - купание_в_море и т.п.

   Выбор из таблицы

Создает и возвращает новую таблицу, сотстоящую из тех записей исходной

таблицы, для которых выполняется заданное условие.

   Synopsis: (selection <table> <L-expr> [<filename>])

<table> задает исходную таблицу, <L-expr> - условие, выполнение которого

требуется, <filename> - имя файла, в который будет помещена создаваемая

таблица. Если <filename> не задано, то будет создана виртуальная таблица.

Обратите внимание на запись условия. Для использования значений полей записей

таблицы в условии в Лоте предусмотрена запись

  (<имя-таблицы> -> <имя-поля>).

Пример:

  (selection (table vacat.ltb) (eq (vacat.ltb -> Сезон) лето) v1.ltb) ==>

     ==> (table v1.ltb)

отбирает из таблицы vacat.ltb записи со значением поля "Сезон" -  "лето",

помещает их в таблицу v1.ltb, и возвращает ее описание.

   Удаление записей из таблицы

   Synopsis: (deletion <table> <L-expr>)

Удаляет из таблицы <table> записи, для которых выполняется условие <L-exp>.

Пример:

  (deletion (table v1.ltb) (eq (vacat.ltb -> Сезон) лето)) ==> (table v1.ltb)

  Проекция

Возвращает таблицу, записи которой представляют собой записи исходной таблицы,

но содержат только поля, перечисленные в списке.

   Synopsis: (projection <table> '(<имя-поля> ...) [<filename>])

Если <filename> не задано, создается виртуальная таблица; в этом случае

идентичные записи удаляются.

Пример:

   (projection (table vacat.ltb) '(Сезон)) ==>

   ==> (table NIL ((Сезон 20 L)) 20 ((лето) (зима) ((лето межсезонье))

                          ((лето зима межсезонье)) ((зима межсезонье))  ) )

  Декартово произведение

  Synopsis: (cartesian <tab1> <tab2> <filename>)

Создает новую таблицу на диске в файле <filename>, являющуюся прямым декартовым

произведением таблиц <tab1> и <tab2>.

Пример:

 (cartesian (table vacat.ltb) (table vaddit) v2.ltb) ==>

    ==> (table v2.ltb)

   Соединение

   Synopsis: (join <tab1> <tab2> <filed1> <field2> <filename>)

Создает новую таблицу на диске в файле <filename>, описание которой содержит

все поля таблицы <tab1>  и все поля таблицы <tab2>, за исключением поля с

именем <field2>. Для кажджой пары записей таблиц <tab1>  и <tab2>, в которых

значения полей с именами <field1> и <field2> соответственно совпадают,

образуется запись в созадаваемой таблице.

Пример:

  (join (table vacat.ltb) (table vaddit.dbf) место пункт v3.ltb)

   Преобразование вида таблиц

Сохранение виртуальной таблицы в файле на диске (превращение в дисковую) и

загрузка дисковой таблицы в оперативную память (превращение в виртуальную).

  Synopsis:  (save-table <table> <filename>)

             (load-table <filename>)

Пример:

   (setq a (load-table vaddit.ltb)) ==>

  ==>  (table NIL ((проезд 25 L)(место 15 C)) 40

       ((пешком Подмосковье) (поезд Карпаты) ((поезд самолет) Пятигорск)))

   (save-table a v4.ltb) ==> (table v4.ltb)

   Выбор из таблицы

Позволяет выбрать из таблицы, представленной на экране в виде меню, несколько

записей и возвращает виртуальную таблицу, содержащую отобранные записи.

  Synopsis: (get-from-table <table> <w-descr>)

<w-desr> - описание окна, которое используется для создания меню. Форма

описания окна приведена в разделе 4.5.

  Пример:  (get-from-table (table vacat.ltb) '(7 0 0 7 10 10 20 50))

  Редактирование таблицы

  Synopsis: (browse <table> <w-descr>)

Вызывает полноэкранное редактирование таблицы с возможностями коррекции,

добавления и удаления записей; используется указанноле окно. Операция допустима

как для виртуальны, так и для дисковых таблиц. Использование функциональных

клавиш при редактировании приведено в приложении 4.

Пример: (browse (table vacat.ltb) '(7 0 0 7 10 10 20 50 'Варианты))

  Вывод таблицы на экран

  Synopisis: (report <table> <w-descr>)

Выводит на экран таблицу <table>  в окне <w-descr>. Для перехода к следующему

экрану (если таблица "длиннее" окна) используются клавиши PgUp,PgDn, если

таблица "шире" окна, то сдвиг вправо-влево осуществляется соответствующими

стрелками клавиатуры (или передвижением мыши).

Пример: (report (table addit.ltb) *table-window*)

  Печать таблицы

  Synopsis: (put-table <table>)

Печатает таблицу на принтере (по 80 колонок в строке)

  Значения поля таблицы

  Synopsis: (<имя-поля> of-table <table>)

Возвращает СПИСОК (не таблицу!), состоящий из всех различных значений,

содержащихся в поле <имя-поля> записей таблицы <table>. Обратите внимание на

отличие этой операции от операции project даже при указании списка полей из

одного элемента: операция project возвращает таблицу.

Пример:

  (Сезон of-table (table vacat.ltb)) ==> (лето зима межсезонье)

      6.3.5. Агрегатные операции

      Эти операции позволяют получить агрегированную информацию о множествах в

 целом. В соответствии с концепцией Лоты каждое множество обладает элементами,

 входящими в него заведомо, и элементами, которые, возможно, входят в него.

 Поэтому такие функции, как сумма или число элементов во множестве, возвращают

 интервал. Например, для любого параметра число элементов в нем лежит между 0

 (т.к. в дальнейшем все элементы могут быть исключены) и общим числом возможных

 элементов на данный момент. Иногда, однако, желательно рассматривать возможные

 значения наравне  снеобходимыми. Для этого случая предназначены специальные

 варианты агрегатных операций.  Поскольку опыт показывает, что при описании баз

 знаний именно такие функции используются чаще, то их имена в Лоте являются

 основными. Соответствующие им "честные" операции получили аналогичные имена с

 префиксом "Р".  Использование агрегатных операций без префикса в посылках

 правил может нарушить свойство логической монотонности, и поэтому желательно

 снабжать такие правила флагом подавления предположения о монотонности (retry).

      Sum

Возвращает сумму всех (возможных) элементов дискретного множества

   Synopsis: (SUM <Seq-exp>)

Пример: (Sum '(1 2 3 4 5)) ==> 15

      PSum

Вычисляет верхнюю и нижнюю границы, в которых может лежать сумма элементов

дискретного множества и возвращает соответствующий интервал.

      Synopsis: (PSum <Seq>)

      Если множество состоит только из возможных элементов , то нижняя граница

интервала будет суммой всех отрицательных членов, а верхняя - суммой всех

положительных.

Пример: (Parameter TEST (domain . '(-1 2 3 4)))

        (PSum test) ==> (-1 . 9)

        (PSum '(1 2 3 4 5)) ==> (15 . 15)

      Sup

Возвращает верхнюю грань интервала возможных значений выражения.

      Synopsis: (Sup <Interv>)

Пример: (Sup '(3 . 12)) ==> 12

      Inf

Возвращает нижнюю грань интервала возможных значений выражения.

      Synopsis: (Inf <Interv>)

Пример: (Inf '(3 . 12)) ==> 3

      Card

Возвращает число всех возможных элементов множества. При попытке оценить

число возможных значений в интервале выдает сообщение об ошибке.

      Synopsis: (Card <S-exp>)

Пример: (Parameter atest (domain . '(a b c d)))

       (Card '(a b c d)) ==> 4

       (Card atest) ==> 4

      PCard

Возвращает интервал между минимально и максимально возможным числом элемен-

тов во множестве.

      Synopsis: (PCard  <S-exp>)

      Отметим, что для параметров (они состоят только из возможных значений)

 нижней границей интервала всегда будет 0.

Пример: (Parameter atest (domain . '(a b c d)))

        (PCard '(a b c d)) ==> 4

        (PCard atest) ==> (0 . 4)

      6.3.5.  LISP функции в качестве операций

      Везде, где используются операций Лоты, допустимо использование функций

Лисп, однако пользователю необходимо очень тщательно следить за тем, чтобы

эти функции возвращали значения того типа, который требуется в данной ситуа-

ции правилами Лоты. Дело в том, что анализатор ошибок Лоты не анализирует

Лисп-функции, и ошибки будут "отловлены" только на уровне Лиспа.

      6.4. Логические выражения (Предикаты)

      6.4.1. Базовые предикаты

      Базовые предикаты применимы ко всем множественным выражениям Лоты и

возвращают одно из трех значений истинности.

      Пустота множества

      Synopsis : (empty <S-exp>)

      Возвращает Т, если множество пусто, TF, если имеются возможные зна-

чения, и NIL, если имеются и необходимые. Таким образом, будучи применен к

параметру, этот предикат не может быть ложным.

Пример: (Parameter atest (domain . '(a b c d)))

        (Empty '(a b c d)) ==> NIL

        (Empty '())  ==> T

      Включение

Проверяет вхождение первого множества во второе.

     Synopsis: (<S-exp1> in <S-exp2>)  или

               (<S-exp1> only <S-exp2>)

     Возвращает T, если P(<S-exp2>)<<I(<S-exp1>), TF,если I(<S-exp2>) <<

P(<S-exp1>), и NIL, если (not I(<S-exp2>)<<P(<S-exp1>)). Напомним, что

I(<S-exp>) и P(<S-exp>) обозначают необходимую часть и область возможных

значений соответственно, а знак << - теоретико-множественное отношение вклю-

чения.

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a b c d) in atest) ==> TF

        (atest only '(a b c d)) ==> T

       Содержание

Проверяет вхождение второго множества в первое.

     Synopsis: (<S-exp1> includes <S-exp2>)

Смысл операции точно такой же, как и у предыдущей.

       Разделение

Проверяет отсутствие пересечения двух множеств.

    Synopsis : (<S-exp1> out-of <S-exp2>)

Возвращает NIL,  если I(<S-exp1>)^I(<S-exp2>),

               TF,   если P(<S-exp1>)^P(<S-exp2>),

                T,   если не P(<S-exp1>)^P(<S-exp2>).

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a e) out-of '(a b c d)) ==> NIL

        ('(e f) out-of atest)  ==> T

    Равенство

Проверяет совпадение двух множеств.

    Synopsys: (<S-exp1> same-as <S-exp2>)

Возвращает

    Т, если I(<S-exp1) >> P(<S-exp2>) и I(<S-exp2>) >> P(<S-exp1>),

    TF, если P(<S-exp1>) >> I(<S-exp2>) и P(<S-exp2>) >> I(<S-exp1>),

    иначе - NIL

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a b) same-as '(a b c d)) ==> NIL

        ('(a b c d) same-as atest) ==> TF

Предикаты сравнения двух интервалов

    Synopsis: (<intr1> less <intr2>)

Возвращает T,   если sup(<intr1>) < Inf(<intr2>),

           NIL, если Inf(<intr1>) > Sup(<intr2>),

          и TF - во всех остальных случаях. Число является частным слу-

чаем интервала и поэтому может быть использовано в данном предикате.

Пример: (Parameter itest (domain . '(0 . 6)))

        ('(-5 . -3) less itest) ==> T

Смысл двух следующих выражений понятен:

              Больше

    Synopsis: (<intr1>  greater <intr2>)

              Не-меньше

    Synopsis: (<intr1>  not-less <intr2>)

    6.4.2. AD-HOC предикаты

    Ad-hoc по латыни означает "к настоящему времени". Именно такой смысл и

вкладывается в эти предикаты, дублирующие все предикаты пунктов 1 и 2. В этих

предикатах не учитывается различие между областями допустимых значений и не-

обходимым диапазоном, т.е. считается, что на настоящий момент все допустимые

значения необходимы, и поэтому выражения, содержащие значения параметров,

трактуются как константы. Эти предикаты не модальны и возвращают всегда одно

из ДВУХ значений истинности - НЕОБХОДИМО или НЕВОЗМОЖНО. Еще раз напомним, что

при их использовании необходимо следить за обеспечением корректности БЗ.

    Пустота множества

    Synopsis : (Now-empty <S-exp>)

Пример: (Parameter atest (domain . '(a b c d)))

        (Now-empty '(a b c d)) ==> NIL

        Включение

Проверяет вхождение первого множества во второе.

     Synopsis: (<S-exp1> now-in <S-exp2>)  или

               (<S-exp1> now-only <S-exp2>)

Пример: (Parameter atest (domain . '(a b c d)))

        (atest now-only '(a b c d)) ==> T

       Содержание

Проверяет вхождение второго множества в первое.

     Synopsis: (<S-exp1> now-includes <S-exp2>)

Смысл операции точно такой же, как и у предыдущей.

       Разделение

Проверяет отсутствие пересечения двух множеств.

    Synopsis : (<S-exp1> now-out-of <S-exp2>)

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a e) now-out-of '(a b c d)) ==> NIL

        ('(e f) now-out-of atest)  ==> T

    Равенство

Проверяет совпадение двух множеств.

    Synopsys: (<S-exp1> now-same-as <S-exp2>) или

              (<S-exp1> = <S-exp2>)

Пример: (Parameter atest (domain . '(a b c d)))

        ('(a b) now-same-as '(a b c d)) ==> NIL

    Предикаты сравнения двух интервалов

    Synopsis: (<intr1> now-less <intr2>);

              (<intr1> now-greater <intr2>)

Пример: (Parameter itest (domain . '(0 . 6)))

        ('(-5 . -3) now-less itest) ==> T

    6.4.3. Предикаты снятия модальностей

    Эти предикаты предназначены для перевода модальных значений истинности в

классическую двузначную логику. Отметим, что они не удовлетворяют предполо-

жению о монотонности, и поэтому желательно, чтобы правила, в посылках кото-

рых они используются, имели одно из ключевых слов, блокирующих предположение

о монотонности - fire, retry.

    Possible

Предикат, выражающий возможность утверждения.

    Synopsis: (Possible <L-exp>)

Возвращает  T,если <L-exp> равно T или TF, NIL,если <L-exp> равно NIL.

Пример: (Parameter atest (domain . '(a b c d)))

        (possible (atest includes a)) ==> T

    Not-sure

Предикат, выражающий отсутствие уверенности в истинности утверждения.

    Synopsis: (Not-sure <L-exp>)

Возвращает T,если <L-exp> равно NIL или TF, и NIL,если <L-exp> равно T.

Пример: (Parameter atest (domain . '(a b c d)))

        (not-sure (atest includes a)) ==> T

        (not-sure ( '(a b c d) includes a)) ==> NIL

    6.4.4. Специальные предикаты

    Специальные предикаты используют значения специальных параметров Лоты.

Несмотря на то, что они возвращают модальные значения истинности, они могут

нарушать условия монотонности, и поэтому необходимы соответствующие "меры

предосторожности" (см. предыдущий пункт).

    Failed

Предикат, выражающий провал подцели.

    Synopsis: (Failed <proto-name>)

Возвращает T, если результат последнего вызова подцели с именем

 <proto-name> был FAILED, иначе -  TF.

Пример: (Failed Спокойный_отдых)

    Succeed

Предикат, выражающий успех подцели.

    Synopsis: (Succeed <proto-name>)

Возвращает T, если результат последнего вызова подцели с именем

<proto-nаme> был SUCCESS, иначе - TF.

Пример: (Succeed Спокойный_отдых)

    6.4.7. Модальные логические операции

    В Лоте, наряду с основными для нее модальными логическими операторами,

существуют и их классические двойники. Для совместимости с Лиспом за класси-

ческими двойниками оставлены их обычные имена (and,or,not), а имена модальных

операторов оканчиваются двоеточием. Мы не рекомендуем употреблять классичес-

кие операторы, так как это может привести к потере свойства монотонности.

Модальное "И"

    Synopsis: (<L-exp1> and: <L-exp2>)

Вычисление проводится по следующим правилам: T&TF=TF, NIL&TF=NIL,

TF&TF = TF.

Пример:   (NIL and: TF) ==> NIL

Модальное "ИЛИ"

     Synopsis: (<L-exp1> or: <L-exp2)

T | NIL = T, T | TF = T, TF | NIL = TF, NIL | NIL = NIL.

Пример:  (NIL or: TF) ==> TF

Модальное отрицание

     Synopsis: (NOT: <L-exp>)

! T = NIL, ! TF = TF, ! NIL = T.

Пример: (Not: TF) ==> TF

    6.4.6 Лисп-функции в качестве логических выражений

    Синтаксис Лоты допускает использование Лисп-функций там, где требуются

логические выражения. Однако мы рекомендуем этого не делать. Опасность зак-

лючается в том, что большинство предикатов Лиспа возвращает значения, кото-

рые могут быть обработаны Лотой неверно: Лисп трактует NIL как ложь, а все ос-

тальные значения - как истинные; для Лоты истину обозначает только константа T.

                6.5. Действия

    Действия (<action>) представляют собой операции по изменению значений ка-

ких-либо параметров, изменению режима консультации, в частности, ее заверше-

нию, в выводе каких-либо сообщений на экран, обращении к пользователю за ка-

ким-либо его действием, а также выполнении процедур, написанных пользовате-

лем. Действия Лоты так же, как подпрограммы Фортрана, не обязаны возвращать

какие-либо значения.

    4.5.1 Действия, изменяющие значения параметров

    Эти действия сокращают диапазон возможных значений параметра, а также вы-

полняют необходимые операции механизма вывода: заносят в стек вывода все пра-

вила, связанные с изменяемым параметром, и изменяют (дополняют) "историю" па-

раметра.

    SYNOPSIS: (<param-name> <operation> <operands>)

    Обращаем Ваше внимание на то, что для отличия от логических выражений все

обозначения этих действий начинаются со слова is-.

    Первый операнд определяет параметр, диапазон которого подвергается кор-

рекции. Второй операнд определяет операцию, применяемую для установки

значения параметра. Далее следуют остальные операнды операции. По сути все

выражения представляют собой макро-сокращения единственного действия, которое

заключается в том, что диапазон параметра сужается до пересечения его с

результатом выполнения операции. Все эти операции приводятся ниже в этом же

пункте.

     Ограничение диапазона

     Synopsis: (<param-name> is-only <S-exp>)

               (<param-name> is-in <S-exp>)

эквивалентно функции (<param-name> ** <S-exp>), т.е. из диапазона значений

параметра удаляются все элементы, не входящие в область возможных значений

<S-exp>.

Пример: (Parameter atest (domain . '(a b c d)))

        (atest is-in '(c d e f)) ==> (c d)

    (<Param-name> is-such <L-exp>)

Из диапазона возможных значений параметра удаляются все те элементы, для

которых <L-exp> ложно, т.е. имеет значение NIL.

Пример: (Parameter stest (domain . '(1 2 3 4 5)))

        (stest is-such  (stest > 3)) ==> (4 5)

    (<Param-name> is-not <S-exp>) или

    (<Param-name> is-out-of <S-exp>)

    эквивалентно функции (<param-name> -- <S-exp>), т.е. из диапазона

возможных значений параметра удаляются все элементы, входящие в область не-

обходимых значений <S-exp>.

Пример: (Parameter atest (domain . '(a b c d)))

        (atest is-not '(c d e f)) ==> (a b)

    (<Param-name> is-less <num>)

допустимо только для параметров типа "интервал" и приводит к совпадению

верхней границы интервала с числом <num> (если оно меньше текущей верхней

границы).

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-less 3) ==> (1 . 3)

    (<Param-name> is-greater <num>)

аналогично предыдущему, но только для нижней границы.

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-greater 3) ==> (3 . 5)

    (<Param-name> is-decreased <num>)

также допустимо только для интервальных параметров и приводит к умень-

шению верхней границы НА <num>.

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-decreased 3) ==> (1 . 2)

    (<Param-name> is-increased <num>)

аналогичное увеличение нижней границы.

Пример: (Parameter itest (domain . '(1 . 5)))

        (itest is-increased 3) ==> (4 . 5)

    6.5.2. Действия управления ситуациями

Успешное завершение ситуации

    Synopsis: (Success)

    Все проведенные в ситуации изменения параметров запоминаются, управление

возвращается к той ситуации, откуда была вызвана текущая. Успешное завершение

"самой старшей" ситуации приводит к возврату в главное меню системы или в ко-

мандный режим. Если установлен флаг сохранения опыта, то при успешном завер-

шении Лота запоминает прецедент ситуации.

Неудачное завершение ситуации

    Synopsis: (Fail)

    Все изменения, осуществленные в ситуации, уничтожаются, все параметры

принимают снова те значения, которыми они обладали на момент входа в данную

ситуацию. Управление возвращается к "старшей" ситуации.

  Завершение ситуации

    Synopsis: (Terminate [<text>])

    Система завершает ситуацию, задавая пользователю вопрос о результате. От-

вет "Да" означает успех, "Нет" - неудачу. Все другие ответы игнорируются. Сам

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

зует стандартный запрос по окончании ситуации. Диалог ведется в окне сообще-

ний.

    Вызов ситуации (подзадачи) из текущей

    Synopsis: (Call <situ-name>)

    Имя ситуации обязательно должно быть упомянуто в слоте GOALS текущей си-

туации. При обращении к этому действию Лота оценивает слот PATTERN вызываемой

ситуации и, если результат - Т, переходит к ситуации с данным прототипом.

При любом ее завершении управление возвращается в текущую ситуацию, а специ-

альный параметр, соответствующий <situ-name> (он имеет такое же имя), полу-

чает новое значение в зависимости от результата вызова. Все правила, связан-

ные с этим параметром, помещаются в стек вывода.

    6.5.3. "Мета-действия"

    Эти действия позволяют изменить ход вывода Лоты, не дожидаясь передачи

инициативы пользователю. Они не нарушают монотонности вывода, однако пользо-

ваться ими следует осторожно, т.к. они затрудняют понимание логики вывода.

      Apply-rule

Заставляет систему немедленно попытаться применить указанное правило.

    Synopsis: (Apply-rule <rule-name>)

Пример: (Apply-rule r2-1)

      Revise

Предоставляет пользователю возможность изменить значение указанного парамет-

ра.

    Synopsis: (revise <param-name> [<prompt-text> [<w-descr>]])

    Если указаны описание окна и текст приглашения, то предварительно выво-

дится текст в специфицированное окно. Формат описания окна приведен при опи-

сании действия Display (п.4.5.4).

Пример: (Revise варианты "Укажите возможные варианты" '(0 7 0 7 0 0 2 80))

      Suspend

Вызов подцели, выбираемой из меню.

    Synopsis : (Suspend)

    На экран выводится меню подцелей текущей ситуации. Если пользователь выби-

рает одну из них, происходит соответствующий вызов.

    Retrieve-param

Принудительный вызов меню параметров ситуации

    Synopsis : (Retrieve-param)

     Retrieve-prec

Принудительный вызов меню прецедентов ситуации

    Synopsis : (Retrieve-prec)

    Cохранение прецедента

    Synopsis: (save-prec [<Prec-name>] [(<Param-name> ...)])

Сохраняет на диск прецедент текущей ситуации. Прецеденты сохраняются в файле

с именем <Fileneme>. Если этот операнд не задан, то в качестве имени

используется значение системной переменной *exp-base*. Если не задано имя

прецедента, то используется стандартное имя (имя консультации плюс порядковый

номер ситуации в данной консультации); если не задан список параметров, то

сохраняются значения всех параметров текущей ситуации.

   Вызов машины логического вывода

   Synopsys: (infer)

Запускает машину логического вывода в текущей ситуации. После окончаняи вывода

производится восстановление экрана.

    6.5.4. Организация пользовательского интерфейса

       Display

Вывод на экран

    Synopsis: (Display <S-exp> [ <w-descr>] [<stop-sign>])

    Выводит на экран текст произвольной длины, являющийся значением указанно-

го выражения. Если задано описание окна, то вывод производится в заданное ок-

но. В противном случае вывод производится в текущее окно. Если указан

<stop-sign> (т.е. третий операнд отличен от NIL), то система останавливается

и ждет нажатия любой клавиши.

    Если необходимо вывести несколько выражений в одном окне, то все их можно

объединить в одном выражении, используя операцию list. Действие Display

позволяет выводить на экран как текст, так и значения любых выражений, в том

числе текущие значения параметров. Единственное исключение - табличные

выражения.  Они выводятся на экран действием report (см.). Печатая

выражения, действие Display пропускает скобки. Если скобки необходимо печтать,

то нужно указать четвертый операнд действия - любое выражение или константу,

отличную от NIL.

Пример:

  (Display " Это - пример вывода текста" '(7 0 0 7 1 3 10 15 'f) T)

  (Display    (list atest "-это значение параметра atest") *text-window*)

    Hypertext

Вывод на экран гипертекста

    Synopsys: (Hypertext <filename> [<paragraph>] [<w-descr>])

Объяснения и примеры приведены в гл.7. Гипертекст предварительно должен

быть создан в текстовом редакторе с указанием параграфов, а затем

проиндексирован с помощью команды index-ht.

    Print-text

Вывод значения выражения (текста) на печать.

    Synopsis: (print-text <S-exp>)

    6.5.5. Составное действие

    Часто желательно при выполнении посылки правила или в "стартовой" проце-

дуре ситуации выполнить не одно, а несколько действий. Для этого в Лоте пре-

дусмотрено сложное действие Progn - другими словами, операторные скобки.

    Synopsis : (Progn <action>... )

Пример: (Progn (display Любимое_занятие '(7 0 0 7 0 0 5 15) Т)(Success) )

    6.5.6. Расширение базы знаний

    Текущая база знаний Лоты может быть расширена в процессе консультации путем

загрузки дополнительных файлов баз знаний или опыта. Следует учитывать, что все

загруженные знания будут доступны только ПОСЛЕ ВЫХОДА из текущей СИТУАЦИИ.

    Если Ваша база знаний столь велика, что не может поместиться в оперативной

памяти, то возможно разбиение ее на относительно независимые базы, вызываемые

из некоторой "старшей" базы знаний - создание оверлейной структуры базы. В

отличие от большинства оболочек, которые не позволяют в таких случаях

передавать значения и описания объектов от одной базы знаний к другой, в Лоте

это допустимо. Для этого нужно перечислить список параметров, правил и

прототипов "старшей" базы в действии Consult. Оверлейные базы знаний не могут

быть скомпилированы и должны всегда исполняться в режиме интерпретации.

    Load-lkb

Загрузка дополнительной базы знаний с диска

    Synopsis : (Load-lkb <filename>)

    Все знания, содержащиеся в новой базе, становятся доступными ПОСЛЕ выхода

из текущей ситуации (безразлично, успешного или неудачного). Можно опустить

расширение файла. По умолчанию предполагается расширение LKB.

    Consult

Вызов "подчиненной" консультации

    Synopsys: (Consult <file-name> [<first-proto-name>][<parameters-list>])

    <first-proto-name> задает имя старшей (целевой) консультации в вызываемой

базе знаний, следующие операнды задают список параметров, правил и ситуаций

ВЫЗЫВАЮЩЕЙ базы знаний, которые должны быть доступны в вызываемой. По окончании

консультации в вызванной базе знаний память, занимаемая описание ее элементов,

освобождается.

    6.5.8 Объяснения, просмотр значений, комментарии, помощь

    Объяснение для правила

    Synopsis: (why <rule-name>)

Вызов режима объяснения для указанного правила. На экран выводится коммента-

рий правила, если он задан (иначе - текст правила), и меню, указывающее, от

каких параметров зависит истинность его посылки. Пользователь может выбрать

из этого меню любой параметр и запросить объяснения его значения (см. how).

    Объяснение для параметра

    Synopsis: (how <param-name>)

Вызов режима объяснений для указанного параметра. На экран выводится коммен-

тарий параметра, его значения и меню, содержащее список правил, действия ко-

торых изменяли диапазон параметра. Пользователь может выбрать любое правило и

просмотреть его объяснения (см. why).

    Объяснения для текущей ситуации

    Synopsis: (explain)

Вызов режима объяснений для текущей ситуации. На экран выводится имя текущей

ситуации, комментарии и меню, содержащее список всех правил, примененных в

данной ситуации и всех ситуаций-подцелей, вызывавшихся из текущей. Пользова-

тель может выбрать интересующий его объект и получить дальнейшие объяснения

как по ситуации, так и по правилу (см. why).

    Просмотр описания объекта базы знаний

    Synopsis: (Show <obj-name>)

    Эта команда допустима только в режиме отладочного прерывания (см.п.3.7).

При выдаче этой команды в ответ на приглашение системы на экран будет выведе-

но описание указанного объекта базы знаний. Операндом действия show может

быть имя параметра, правила или ситуации в текущей базе знаний.

Пример: (Parameter atest (domain . '(a b c d)))

        (Show atest) ==> ((domain . (a b c d)))

      Запрос о помощи

      Synopsis: (help <Object>)

 Вызов экрана помощи. В Лоте предусмотрен справочный текст для англйских ва-

риантов выражений, предикатов и действий языка представления знаний.

    6.5.9. Системные действия

  Выход в режим интерпретации команд

    Synopsis : (Commander)

    Лота переходит в командный режим и остается там до тех пор, пока не будет

нажата клавиша <Esc>. После этого система попытается продолжить работу с того

места, где она была прервана.

    Вызов редактора базы знаний

    Synopsis: (edit [<filename>])

Вызывает редактор для работы с указанным файлом. Если вы используете встроенный

редактор баз знаний, то вызываемый файл обязательно должен представлять собой

базу знаний или базу опыта Лоты; при использовании иного редактора (например,

Multi-Edit или Лексикон), возможно редактирование любых текстовых файлов.

    Выполнение команды MS-DOS или BATCH-файла

    Synopsis : (dos "<command>")

  Вызывает выполнение команды DOS, указанной в двойных кавычках. Для исполь-

зования знаков Backslash (\) и двойных кавычек необходимо экранирование симво-

лом \. Команда учитывает РАТН операционной системы.

  При вызове команды без операнда происходит запуск вторичного интерпретатора

команд DOS. Возвращение в Лоту происходит по команде exit.

Пример: (dos "dir *.*")

        (dos "c:\\turbo_c\\showpie dead.db")

    Изменение значений переменных среды (конфигурации) Лоты.

    Synopsis: (Setq <environment-par> <new-value>)

    Переменные среды, их возможные значения и значения по умолчанию приводят-

ся в п 3.11. На самом деле эта функция - обычная функция Лиспа, аналогичная

оператору присвоения в "традиционных" языках. Лота не производит проверки на

допустимость значений.

Пример: (Setq *trace* 2)

    Окончание консультации

    Synopsis : (Stop)

Система возвращается в главное меню.

    Аварийный выход в операционную систему

    Synopsis : (System)

    Загрузка и выполнение Лисп-программы из внешнего файла

    Synopsis: (Load <filename>)

    Лота загружает и пытается выполнить программу, содержащуюся в указанном

файле. По завершении программы Лота будет пытаться продолжить вывод.

    6.5.9.Лисп-функции в качестве действия Лоты

    Везде, где возможно указать действие Лоты, разрешается написать любую

функцию Лиспа. Как уже отмечалось, Лота не использует результат, возвращаемый

этими функциями, поэтому обеспечивать все требуемые действия следует побочны-

ми эффектами. Советуем избегать использования ключевых слов Лоты в своих про-

граммах.

_




1. Варіант 20 Студента групи- ЕПз01к Малигон А
2. Проект оцінки впливу на навколишнє середовище облаштування Казанського олійної фабрики
3. Опера В. -А. Моцарта Свадьба Фигаро (Le Nozze di Figro)
4. История волжского казачьего войска
5. мрачной эпохи средневековья слишком часто выпадающей из официальных программ Декарта Мальбранша Спин1
6. экзаменационной сессии 5
7. ревнителей древнего благочестия
8. Проектирование усилителя низкой частоты
9. экономического развития
10. тематике 201213 учебного года 7 класс Семь томов энциклопедического словаря стоят в следующем порядк
11. Сара Дессен Просто слушай
12. Таттехмедфарм О
13. Застосування альтернативних джерел енергії в сільському господарстві
14. вживає поняття спілкування
15. Сексуальная совместимость партнеров Формирование либидо.html
16. Антропологический характер философии эпохи Возрождения и ее основные направления.html
17. . Методологія педагогіки.
18. Виды рыночной конкуренции
19. Библиотеки декабристов
20. Лабораторная работа 4Поиск экстремумов функции одной переменной Поиск наибольших наименьших значений фун