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 |