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 |