Новосибирский Государственный Университет
Опубликован: 05.02.2007 | Доступ: свободный | Студентов: 2252 / 437 | Оценка: 4.30 / 4.23 | Длительность: 10:15:00
Лекция 12:

Расширения и приложения Лиспа

< Лекция 11 || Лекция 12: 12
Аннотация: В заключении рассмотрим как дальше осваивать Лисп, практично использовать возможности Лисп-систем и систем функционального программирования. Познакомимся немного с историей Лиспа

На примере GNU Clisp ( Common Lisp language interpreter and compiler) рассмотрим типичные возможности Лисп-систем, описанные в man-файле комплекта поставки [GNU Clisp]1См. Файлы clisp.bat и read.me

Вызов Лисп-интерпретатора и/или компилятора.

Без аргументов (опций) выполняется цикл "чтение-вычисление-печать", при котором выражения читаются поочередно из стандартного потока ввода, вычисляются Лисп-интепретатором, и полученные результаты выводятся в стандартный поток вывода. Опция –c специфицирует Лисп-файлы, предназначенные для компиляции в байт-код, который выполняется более эффективно.

Формат вызова Лисп-системы:

clisp [ -h ] [ -m memsize ] [ -M memfile ] 
[ -L language ] [ -N directory ] [ -q ] [ -I ] 
[ -i initfile ... ]        [ -c [ -l ] lispfile 
[ -o outputfile ] ...  ] [ -p packagename ] [ -x expression ]2Заключение в квадратные скобки означает возможное отсутствие. Многоточие – многократное вхождение предшественника 

OPTIONS

-h Показывает формат вызова Лисп-системы

-m memsize Установливает объем памяти. Для современных версий игнорируется.

-M memfile Определяет внутреннее наполнение памяти Лисп-системы. Оно должно быть создано функцией "saveinitmem".

-L language Задает язык сообщений для взаимодействия с пользователем. (английский, немецкий, французский и др.) Влияет на тексты диагностики.

-N directory Указывает, где искать файлы с текстами сообщений.

-q Ни заставки, ни прощального текста не выдается.

-I вариант диалога в стиле ILISP (популярный интерфейс, принятый в редакторе Emacs)

-i initfile ... Специфицирует инициализирующие файлы, которые будут загружены при запуске системы. Это должны быть исходные или компилированные Лисп-файлы,

-c lispfile ... Компилирует специфицированные Лисп-файлы в байт-код. Компилированные файлы затем загружаются вместо исходных, чтобы повысить эффективность.

-o outputfile Задает файл вывода или директорию для компиляции предшествующего лисп-файла.

-l будет выполняться листинг байткода для компилируемых файлов. Полезно только для целей отладки.

-p packagename При загрузке устанавливает начальное значение переменной *package*

-x expressions Выполняет серию произвольных выражений вместо цикла "read-eval-print". Значения выражений выводятся в стандартный поток вывода. Согласно системным соглашениям выражения должны быть заключены в скобки, а двойным кавычкам и обратным чертам следует предпослать обратную черту.

@optionfile Подставляет содержимое файла как аргумент для запуска Лисп-системы. Каждая строка воспринимается как отдельный аргумент.

При работе с Лисп-системой полезны следующие возможности:

(apropos name) перечисляет символы, включающеие " name "

(exit) or (quit) or (bye) - выход из Лисп-системы

EOF (Ctrl-Z) Покидает текущий " read-eval-print " цикл

Стрелки управления курсором позволяют построчно редактировать и просматривать историю ввода текста программы.

Соглашение об именах файлов:

lisp.exe основной исполнитель

lispinit.mem исходный/начальный образ/состояние памяти

config.lsp конфигурация и настройки

*.lsp исходные тексты на Лиспе

*.fas результат компиляции – байт-код

*.lib библиотечная информация, создаваемая и используемая компилятором

*.c Си-код, компилированный по исходному Лисп-тексту

Практичные расширения Лиспа

Средства и методы программирования на Лиспе образуют два слоя. Глубинный слой - локальное программирование, нацеленное на определение:

  • строгих функций,
  • безотходных структур данных,
  • регулярных отображений,
  • методов оперирования вычислениями.

Внешний слой - моделирование практичных парадигм программирования и механизмов их реализации:

  • прототипы и макеты программ,
  • интеграция разных стилей и методов программирования,
  • учебное и экспериментальное программирование,
  • проверка новых идей и подходов к организации информационных систем.

Естественно, работа на внешнем слое требует своей терминологии и развития понятий, отражающего расширение класса решаемых задач, повышение уровня общности и организованности решений:

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

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

Так, например, пакет CLOS (Common Lisp Object System) поддерживает ООП в терминах классов, методов, суперклассов, экземпляров и семейств функций, подчиненных механизмам инкапсуляции и наследования с управляемым полиморфизмом.

< Лекция 11 || Лекция 12: 12