YLISP 3.7 WIN32





                              Y L i s p  3.7

              = Недостающие стандартные средства Коммон Лиспа =


     В данном файле перечисляются наиболее значительные пробелы  данной реа-
     лизации языка Коммон Лисп по сравнению со стандартом [CLTL]. Несогласо-
     ванности по объектно-ориентированному расширению можно  найти  в  файле
     CLOS.TXT.

     Отсутствующие встроенные типы данных
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     ARRAY     Не  поддерживаются  настраиваемые  (adjustable)   массивы   и   
               массивы,       смещенные       относительно      существующих 
               (displaced-to).

     BIT-VECTOR Тип `битовый вектор'.

     COMPLEX   Тип комплексных чисел не совсем полон.

     PATHNAME  Тип имен путей файлов, хотя функции merge-pathnames, 
               make-pathname и pathname-name с друзьями  наличествуют и 
               оперируют обычными Лисп-строками, которые  представляют  пути 
               файлов.

     PACKAGE   Тип  пакетов, т.е. пространств  имен символов,  хотя  функции
               apropos, apropos-list и intern допускают в  качестве необяза-
               тельного аргумента имена `виртуальных' пакетов: lisp, user  и
               keyword.

     RATIO     Тип дробно-рациональных чисел.

     INTEGER   Целые числа имеются, но их максимальная длина 32/64 бита,
               в зависимости от сборки.

     READTABLE В системе наличествует лишь одна  встроенная  таблица чтения,
               которая всем знакам с ASCII-кодами, большими 127, приписывает
               синтаксический тип `составляющий' (constituent).

     RANDOM-STATE
               Тип `состояние генератора случайных чисел' не поддерживается,
               хотя  в системе  имеются генератор  равномерно распределенных
               случайных чисел с единственным состоянием и функция random.

     Ввиду  указанной  неполноты  системы  типов,  некоторые  функции  имеют
     меньшее число принимаемых аргументов, например, для make-array недопус-
     тимо  задавать  ключи  :adjustable,  :fill-pointer,   :displaced-to   и
     :displaced-index-offset.


     Неполнота лексического контекста
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Система YLisp использует динамический контекст  для  tag-меток  и  имен
     блоков. Как следствие, в лексическом замыкании сохраняются  лишь лекси-
     ческие связи переменных (и лямбда-выражение). Отсутствуют  также лекси-
     ческие функции и макросы (flet, macrolet), а специальная  форма  labels
     позволяет динамически связать с символами новые определения функций.

     Тело функции не заключается  в  неявный  блок,  поименованный  символом
     функции. Так что недопустим возврат значения функции   с
     помощью

          (return-from  ).


     Функция макрорасширения
     ~~~~~~~~~~~~~~~~~~~~~~~
     В отличие от стандарта [CLTL], функция расширения, связываемая с симво-
     лом макроса (macro-function), не есть функция с двумя аргументами: фор-
     ма макровызова и лексический контекст. Вместо этого, макро-функция есть
     список вида

          (macro macro-lambda-list . body),

     где macro-lambda-list - список параметров макроса в том виде, в котором
     он задается в форме defmacro (со всеми ключевыми словами).

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

     Структурная печать (pretty-printing)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Имеется лишь одна из перечисленных в стандарте переменная управления 
     структурной печатью (*PRINT-PRETTY*). Печать отвечает названию, но 
     реализована не в соответствии со стандартом.
     Переменная *LINE-SIZE* типа FIXNUM определяет размер строки при выводе
     в потоки, не имеющие информации о допустимой ширине вывода.