HomeLisp 13.4.1

Эта работа посвящается памяти Алексея Жаркова, моего друга и большого энтузиаста Лиспа, безвременно ушедшего из жизни в 1994 году.

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

О программе
В этом разделе рассказывается о том, что послужило прототипом и основой представляемой программы, раскрывается мотивация разработчика, описываются условия, на которых программа передается пользователям. Этот небольшой раздел следует прочитать до конца!

Установка и удаление
Здесь описывается процедура инсталляции и деинсталляции программы. Кроме того, приводится список стандартных компонентов Microsoft, которые используются программой; описываются директории, которые создаются в процессе инсталляции. Приводится список файлов, входящих в инсталляцию.

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

Конфигурация
В этом разделе подробно описана структура конфигурационных файлов HomeLisp, а также режим конфигурирования среды разработки и библиотеки HomeLispLib.Exe. Конфигурирование Web-компоненты рассматривается в разделе, целиком посвященном Web-компоненте.

Ввод S-выражений
Самое главное, что должен знать пользователь любой Лисп-системы, это правила ввода S-выражений. В этом разделе разъясняется, как вводить S-выражения в системе HomeLisp; показывается, как контролировать баланс скобок, как пользоваться стеком введенных команд.

Шаблоны стандартных конструкций
Первым препятствием для изучающих Лисп обычно является запоминание синтаксиса основных конструкций Лиспа (COND, DEFUN, PROG и др). В разделе 5 описываются правила использования стандартных шаблонов. Приводится содержательный пример их использования и объясняется, как создавать свои шаблоны.

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

Работа с дампами
Дампированием процесса вычисления - это занесение в текстовый файл всех этапов вычисления S-выражения. По содержанию дамп-файла удобно анализировать процесс вычисления и искать ошибки. Рассказывается, как включать и выключать дампирование и как просматривать полученные дампы без выхода из среды разработки.

Менеджер графических окон
Здесь рассказывается о том, как управлять отображением, скрытием и уничтожением графических окон HomeLisp. Оконный менеджер доступен при работе в среде разработки (IDE), а также при выполнении exe-файлов, сгенерированных с диспетчерской формой.

Общие сведения о входном языке HomeLisp
Приступая к изучению любого языка программирования, начинать следует с основ - с алфавита, правил записи имен и выражений, встроенных типов данных. Все эти сведения и собраны в этом разделе. Хотя Лисп предполагает действия над числами двух типов (целых и вещественных), его арифметика весьма своеобразна. В этом разделе приводятся начальные сведения об арифметике Лиспа, рассказывается, как ведут себя арифметические функции Лиспа при задании аргументов различных типов. Описываются и другие типы данных - битовые шкалы, строки и большие двоичные объекты (BLOBы).

Предопределенные атомы
Атом - основная единица информации в Лиспе. Предопределенные атомы - это математические константы; константы, описывающие методы доступа к файлам, цвета и др. Раздел содержит список этих констант с их значениями и областью применения.

Встроенные функции стандартного Лиспа
Здесь приведено подробное, с примерами, описание встроенных функций стандартного Лиспа: функции действия со списками, элементарные арифметические, функции работы со списком свойств и уборки мусора. Описание каждой функции, кроме совсем элементарных, сопровождается примерами.

Функции управления средой
В этом небольшом разделе описываются функции, управляющие поведением среды разработки: включения-выключения эха, дампирования, статистики, журналирования).

Отладчик (новый раздел)
Приличная (или претендующая быть таковой) система программирования обязана включать в себя отладчик. Описываемый в этом разделе отладчик HomeLisp имеет достаточно скромные возможности (точки останова, просмотр контекстов в процессе вычисления). Тем не менее, он может оказаться небесполезным в практической работе.

Графические функции
HomeLisp включает небольшой набор графических функций (30 штук), позволяющих рисовать простейшие объекты, выводить текст, сохранять графическое изображение в файлах и загружать изображение из файла. Поддерживается также и "черепашья" графика. Графическая подсистема позволяет управлять многими графическими окнами. Описание этих возможностей (с примерами и картинками) читатель найдет в этом разделе.

Действия с файлами
Полноценное программирование немыслимо без использования файлов. Для работы с файлами HomeLisp включает функции, позволяющие работать как с текстовыми, так и с двоичными файлами. В дополнение к стандартным методам доступа, описан метод, позволяющий читать входной текстовый файл, как массив строк (в произвольном порядке).

Действия с большими двоичными объектами
Кроме действия с объектами, традиционными для Лиспа, HomeLisp позволяет работать с блоками байтов произвольой длины. Такие объекты традиционно называются BLOB-ами (сокращение от английского binary large objects). HomeLisp позволяет создавать BLOB-ы, загружать в них информацию (как программно, так и из файлов), писать BLOB-ы на диск и т.д.

Системные функции
В этом разделе описывается библиотека системных функций: копирование, перемещение, удаление файлов; сведения о системных ресурсах; версия ОС; системные диалоги - всего более тридцати функций. Использование этих функций позволит пользователю комфортно чувствовать себя в среде Windows.

Строковые функции
Строки являются важнейшими объектами в современых языках программирования. В этом разделе описывается скромная библиотека функций работы со строками. Эти функции позволяют делать над строками типовые действия: выделение подстрок, замена, поиск подстрок, перевод из регистра в регистр и т.п.

Действия с реестром
Реестр Windows хранит большинство системных надстроек операционной системы. Современное средство разработки должно представлять пользователю возможность работы с реестром. В HomeLisp-е имеется всего девять встроенных функций манипулирования реестром. Однако эти функции обеспечивают большинство необходимых возможностей.

Действия с COM-объектами
Полноценная работа в среде Windows немыслима без технологии COM. В этом разделе описывается небольшая библиотека встроенных функций HomeLisp-а, позволяющая создавать COM-объекты, вызывать их методы и использовать их свойства.

Организация диалогов
Функции, описываемые в этом разделе, служат для организации диалоговых программ использующих стандартный графический интерфейс Windows. Это означает, что HomeLisp позволяет писать нормальные Windows-приложения (а не консольные приложения, как большинство некоммерческих версий Лиспа).

Математические функции
Графика и вычисления требуют поддержки элементарных математических функций (экспонента, логарифм, тригонометрические функции и т.д.) В этом разделе приведен полный список поддерживаемых математических функций HomeLisp-а.

Функции работы с hash-массивами (новый раздел)
Hash-массивы (массивы, индексируемые произвольными объектами, а не только последовательными целыми) давно стали привычными средствами в современных языках программирования. Лисп здесь не составляет исключения. В этом разделе приводится описание небольшого набора функций для манипулирования hash-массивами.

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

Библиотека дополнительных функций
В этом разделе содержится описание дополнительных функций (написанных на HomeLisp-е). Эти функции выполняют нетривиальные действия со списками, организуют ассоциативные списки, обеспечивают множественный выбор и т.д. Большая часть этих функций взята из книги Лаврова и Силагадзе. Приводятся примеры вызовов функций с краткими комментариями.

Работа в конструкторе диалогов
Этот раздел описывает встроенный в среду разработки HomeLisp экранный дизайнер (конструктор диалогов). Визуальное проектирование диалогов служит неплохим дополнением к возможностям диалоговых функций HomeLisp. Читатель, знакомый с дизайнером VBA не встретит никаких трудностей при чтении этого раздела.

Работа с библиотекой HomeLispLib.Exe
Это раздел предназначен тем, кто хочет использовать возможности языка Лисп, программируя на других языках (VB, VBA, C++, Delphi - на любом языке, поддерживающем COM), а также тем, кто хотел бы писать скрипты (сценарии) на Лиспе. Приводятся сведения о том, как зарегистрировать библиотеку, как выполнить необходимые настройки для использования скриптов, а также подробно описываются свойства и методы класса clsLisp, "живущего" в библиотеке HomeLispLib.Exe.

Создание EXE-файлов
Здесь рассказывается, как можно создавать автономные исполняемые файлы для программ, написанных на HomeLisp. Такие исполняемые файлы содержат в своем составе исполнительную систему HomeLisp (т.е. все функции классов SUBR/FSUBR), а также библиотечные функции классов EXPR/FEXPR/MACRO, которые разработчик пожелает включить в состав исполняемого файла. При запуске такого файла, сначала инициализируется ядро HomeLisp, а затем начинает выполняться стартовое S-выражение (которое разработчик задает при создании EXE-файла). Из стартового выражения вызываются все необходимые функции.

HomeLisp и WEB
В этом разделе описывается Web-компонента HomeLisp, превращающая HomeLisp в серверное приложение Web-сервера IIS. Описываются особенности конфигурирования, запуска, администрирования и пользовательский интерфейс. Web-компонента, по замыслу автора, предназначена для использования в составе учебного класса (где на рабочих местах обучаемых могут стоять маломощные, дешевые компьютеры).

Приложения

Очень краткое введение в язык Лисп (Раздел находится в стадии доработки)
В этом разделе дается сжатое описание основных концепций языка Лисп. Раздел задуман исключительно в целях полноты изложения (хотя, как надеется автор, он все же будет нелишним).

Приемы программирования и избранные задачи (Раздел находится в стадии доработки)
Раздел содержит различные примеры программ на HomeLisp. Некоторые из них автор позаимствовал из литературы, а некоторые (более простые) - придумал сам. Подробный разбор задач призван показать все аспекты языка HomeLisp. Автор надеется, что раздел будет полезен читателям (особенно впервые изучающим Лисп).

Особенности 13-й редакции ядра HomeLisp
Для удобства пользователя здесь собраны ссылки на все особенности 13-й редкции ядра (новые функции и концептуальные особенности).
Алфавитный указатель функций HomeLisp
Здесь содержится сквозной алфавитный указатель всех функций HomeLisp (как встроенных, так и написанных на HomeLisp).
Список литературы (Раздел находится в стадии доработки)
Приводятся ссылки на печатные издания, а также на различные сетевые ресурсы, посвященные Лиспу.