YLISP 3.7 WIN32





                              Y L i s p  3.7

                  = Стандартные средства языка Коммон Лисп =


     Система разработки YLisp 3.7 поддерживает

     - 11 основных типов данных и 7 подтипов,
     - свыше 500 функций, специальных  форм, макросов и переменных,
     - многочисленные синтаксические средства,

     специфицированные в стандарте [CLTL] языка Коммон Лисп.

     Встроенные типы данных
     ~~~~~~~~~~~~~~~~~~~~~~

     BIGNUM    Подтип INTEGER, объединяющий целые числа большой величины 
               (64 бита).

     CHARACTER Тип знаков (букв) допускает задание

               - шрифтов, т.е. целых в диапазоне [1,255];

               - битов со следующими именами:
                  Control  для всех знаков;
                  Alt      вместо Meta;
                  Shift    только для знаков, соответствующих функциональным
                           клавишам (F1, F2,  ...,  F12)  и  расширению кла-
                           виатуры (Home, Up, PgUp, GreyMinus и т.д.)

     COMPILED-FUNCTION
               Представляет объекты типа `компилированный код', реализующие
               встроенные в Лисп-систему функции, специальные формы и 
               макросы.

     CONS      Тип непустых списков, или, что то же самое, точечных  пар.
               Является подтипом типа LIST, но не содержит элемент nil.

     FIXNUM    Подтип INTEGER, объединяющий короткие целые числа из
               диапазона [-16777216, 16777215].

     FLOAT     Тип чисел с плавающей точкой двойной точности
               (т.е. DOUBLE-FLOAT).

     HASH-TABLE Тип `хэш-таблица'.

     INTEGER   Тип целых чисел.

     KEYWORD   Подтип типа SYMBOL, представляющий ключи.

     LIST      Тип `список', объединяющий  всевозможные  непустые  списки  и
               выделенный пустой список nil.

     NULL      Тип данных, являющийся  одновременно подтипом SYMBOL и LIST и
               содержащий единственный элемент nil, т.е. пустой список ().

     NUMBER    Тип всевозможных чисел, являющийся надтипом FLOAT и INTEGER.

     SEQUENCE  Тип `последовательность', является надтипом для VECTOR и LIST.

     STREAM    Тип `поток'  включает файловые потоки,  потоки-окна и потоки-
               строки (string-stream). В данной  версии  YLisp  доступны три
               стандартных окна:

               - основное  окно, с  которым  изначально  связана  переменная
                 *terminal-io*,  для  которого допустимо  как чтение,  так и
                 выдача;

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

               - Окно выдачи информации сборщика мусора *gc-output*.

               Также можно создавать дополнительные оконные потоки.

     STRING    Тип  `строка', являющийся  подтипом  типа  VECTOR,  допускает
               лишь простые строки.

     STRING-CHAR
               Тип  `строковый знак'  есть подтипом CHARACTER  и  объединяет
               знаки, которые могут быть  помещены в строку.  Любой знак без
               шрифта и битов, кроме тех, которые соответствуют функциональ-
               ным клавишам, является строковым.

     SYMBOL    Присутствуют два  пространства имен (пакета) символов:  стан-
               дартный, ссылка  на который не требует квалификатора (объеди-
               няет lisp и user), и пакет ключей keyword.

     VECTOR    Реализует простые общие (general simple) вектора.

     ARRAY     Массивы произвольной размерности.

     Иерархия типов данных системы YLisp может пополняться за счет:

     - определяемых типов (deftype),

     - структурных типов, вводимых с помощью defstruct,

     - типов стандартных объектов, подробнее см. файл CLOS.TXT.


     Стратегии связывания переменных (variable binding)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Система YLisp позволяет совместно использовать два типа переменных:

     - лексические, или статические,  (lexical/static)  переменные,  область
       видимости (scope) которых ограничена телом функции, а  время действия
       (extent) неопределено.

     - динамические, или специальные,  (dinamic/special)  переменные,  имеют
       динамический контекст, т.е. неопределенную область видимости  и дина-
       мическое время действия.

     Неотъемлемой частью языка являются лексические  замыкания:  специальная
     форма function создает замыкание, в котором  сохраняются лямбда-выраже-
     ние и лексические связи переменных.


     Механизм оценивания
     ~~~~~~~~~~~~~~~~~~~
     Цикл верхнего уровня чтение-оценивание-печать интерпретатора  YLisp ак-
     компанируется специальными переменными журнала  +,  ++,  +++, -, *, **,
     ***, /, //, ///.

     Реализована возможность установки `крючка' (hook-механизма) для зацепки

     - процесса оценивания:  специальная  переменная  *evalhook*  и  функция
       evalhook;

     - процесса применения  функции  к  аргументам:  специальная  переменная
       *applyhook* и функция applyhook.


     Список параметров функций (lambda-list)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     В системе YLisp обеспечена  синтаксическая  и  семантическая  поддержка
     лямбда-ключевых слов &optional, &rest, &key, &allow-other-keys и &aux с
     возможностью указания:

     - значений по умолчанию (init-form),

     - параметров, идентифицирующих задание соответствующих аргументов
       (supplied-p).


     Макросы (macros)
     ~~~~~~~~~~~~~~~~
     Список параметров макроса в форме defmacro может содержать:

     - те же лямбда-ключевые слова, что и список  параметров  функции,  плюс
       &whole, &body и &environment,

     - деструктурирующий шаблон (destructing facility).

     Фактическое замещение формы макровызова на результирующее макрорасшире-
     ние в исходном ЛИСП-коде контролируются  жестко  прошитым  (hard-wired)
     параметром и может быть двояким:

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

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

     Поддерживаются также  макросы  чтения,  ассоциируемые  с  макро-знаками
     (macro-characters) при помощи таблицы чтения (readtable),  включая  так
     называемую обратную блокировку (backquote).


     Обобщенные переменные (general variables)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     YLisp  поддерживает  макрос  присваивания  значения обобщенной перемен-
     ной setf, а также сопутствующие примитивы: defsetf, define-setf-method,
     get-setf-method и define-modify-macro.


     Функции, возвращающие множественные значения (multiple value)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Число значений, возвращаемых встроенными функциями values и values-list
     ограничено лишь размером стека интерпретатора.


     Форматный вывод в знаковые потоки (format)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Шаблон, контролирующий форматирование, может содержать любые  из специ-
     фицированных в [CLTL] директив, кроме ~P, ~R, ~G, ~$, ~< и ~>.


     Структурная печать (pretty print)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Программа структурной печати системы YLisp сочетает три метода формиро-
     вания отступа при выдаче списков:

       1) блочный формат, который управляется шаблоном, приписанным первому
          символу списка;

       2) стандартный формат, эвристически формирующий отступ  в зависимости
          от типа первого элемента, текущей позиции для вывода и  ширины вы-
          ходного потока;

       3) мизерный формат, при котором каждый  элемент  печатается  с  новой
          строки.

     Средства обработки ошибок и отладки
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     - стандартные функции выдачи диагностики (error, cerror, warn);
     - механизм прерыванных состояний (break) с неограниченным числом уровней;
     - пошаговое оценивание формы (step);
     - трассировка функций (trace).

     Система документирования
     ~~~~~~~~~~~~~~~~~~~~~~~~
     YLisp полностью поддерживает  средства  документирования,  специфициро-
     ванные в [CLTL,CLOS], а именно:

     - Поясняющие Лисп-строки (documentation-string) в теле специальных форм
       и    макросов     defclass,     defconstant,     defun,     defmacro,
       define-modify-macro,   define-setf-method,   defparameter,   defsetf,
       defstuct, defvar.

     - Опция :documentation для классов и слотов.

     - Функция получения справки documentation и метод для ее установки

          (setf (documentation  ) ),

       где  ::= function | setf | stucture | type | variable.

     Разумеется, в Лисп-программах допустимы комментарии простейшего вида:
     - построчные, расположенные после точки с запятой `;',
     - заключенные в скобки #| |#, которые могут быть вложенными,  но должны
       быть сбалансированными.