Общий Лисп

Обычная шепелявость История и стандартизация Common Lisp (CL) разработан как стандартизированный преемник Maclisp   Стандарт ANSI Common Lisp опубликован в 1994 […]

Обычная шепелявость

  • История и стандартизация

    • Common Lisp (CL) разработан как стандартизированный преемник Maclisp  
    • Стандарт ANSI Common Lisp опубликован в 1994 году  
    • CL HyperSpec создана на основе стандарта ANSI Common Lisp  
  • Синтаксис и типы данных

    • CL использует S-выражения для кода и структур данных  
    • Типы данных включают скалярные, символьные, логические и структуры данных  
    • Символы могут быть уникальными именованными объектами данных  
  • Структуры данных

    • Списки состоят из последовательностей cons  
    • Векторы и массивы поддерживают динамическое изменение размера  
    • Хэш-таблицы хранят связи между объектами  
    • Пакеты используются для разделения программы на пространства имен  
    • Структуры и классы поддерживают сложные структуры данных  
  • Функции и определения

    • CL поддерживает первоклассные функции и функции более высокого порядка  
    • Функции могут принимать другие функции в качестве аргументов  
    • Макрос defun определяет функции с помощью имени, аргументов и тела  
    • Анонимные функции определяются с помощью лямбда-выражений  
    • Локальные функции определяются с помощью flet и меток  
    • Функции могут быть скомпилированы с помощью оператора compile  
  • Макросы и методы

    • Макрос defgeneric определяет общие функции  
    • Макрос defmethod определяет методы  
    • Методы могут специализироваться по закрытым стандартным классам, системным классам, структурным классам или отдельным объектам  
    • Универсальные функции также являются первоклассным типом данных  
  • Пространство имен функций

    • Пространство имен для имен функций отделено от пространства имен переменных данных  
    • В Common Lisp операторы, определяющие имена в пространстве имен функций, включают defun, flet, labels, defmethod и defgeneric  
    • Для передачи функции по имени в качестве аргумента другой функции используется оператор function  
  • Модель вычисления Scheme

    • В Scheme существует только одно пространство имен  
    • Вычисляются все позиции в форме, а не только аргументы  
    • Код, написанный на одном диалекте, может сбивать с толку программистов на другом  
  • Множественные возвращаемые значения

    • Common Lisp поддерживает концепцию множественных значений  
    • Выражение может иметь одно первичное значение и любое количество вторичных значений  
    • Вторичные значения передаются по выделенному побочному каналу  
  • Другие типы данных

    • Имена путей представляют файлы и каталоги  
    • Потоки ввода и вывода представляют источники и приемники данных  
    • Встроенные генератор псевдослучайных чисел и объекты случайного состояния  
    • Условия представляют ошибки и исключения  
    • Классы являются объектами первого класса и сами являются экземплярами классов  
    • Readtables управляют анализом текста исходного кода  
  • Масштаб

    • Программы на Common Lisp используют имена для обозначения переменных, функций и объектов  
    • Область применения зависит от расположения ссылки, типа выражения и конструкции привязки  
    • Среда — это словарь времени выполнения, сопоставляющий символы с привязками  
  • Виды окружающей среды

    • Глобальный: ссылки на новый тип становятся известны везде  
    • Динамический: привязки устанавливаются в начале выполнения конструкции и исчезают при завершении  
    • Динамическая область видимости полезна для ясности и дисциплины глобальных переменных  
  • Ошибки с глобальными переменными

    • Небрежная замена значения глобальной переменной может привести к ошибкам.  
    • Присвоение новой локальной привязки внутри выражения может избежать ошибок.  
  • Динамические переменные

    • Динамические переменные создают временные ячейки памяти для переменных.  
    • Привязка переменной временно скрывает предыдущую привязку.  
    • Динамические переменные могут использоваться для передачи контекстной информации.  
  • Лексические переменные

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

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

    • Макрос until предоставляет конструкцию цикла until.  
    • Макрос использует tagbody для проверки условия и перехода к тегам.  
    • Пример использования макроса until демонстрирует его применение.  
  • Расширение макросов в Common Lisp

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

    • Макросы могут захватывать символы из контекста вызова.  
    • Захват может привести к дефектам, если символы используются в разных контекстах.  
    • Gensyms и пакеты используются для предотвращения захвата.  
  • Система кондиционирования

    • Система условий обрабатывает исключения в Common Lisp.  
    • Условия описываются объектами, обработчики вызываются при возникновении условия.  
    • Перезапуски позволяют автоматически устранять проблемы.  
  • Объектная система Common Lisp (CLOS)

    • CLOS включает инструменты для объектно-ориентированного программирования.  
    • CLOS позволяет изменять функции и классы во время выполнения.  
    • CLOS интегрирована в ANSI Common Lisp.  
  • Компилятор и интерпретатор

    • Интерпретатор выполняет исходный код Lisp.  
    • Компилятор генерирует байт-код или машинный код.  
    • Common Lisp требует лексическую область видимости для интерпретатора и компилятора.  
    • Компилятор может быть вызван с помощью функций compile и compile-file.  
    • Функция eval оценивает код в виде s-выражений.  
  • Реализация Common Lisp

    • Несколько реализаций Common Lisp используют компилятор для выполнения кода.  
    • Файловый компилятор генерирует файлы fasl, которые можно загружать в систему.  
    • Файловый компилятор может генерировать байт-код, код на Си или машинный код.  
  • Интерактивный режим

    • Common Lisp можно использовать в интерактивном режиме, даже если код полностью скомпилирован.  
    • Язык проводит различие между временем чтения, компиляции, загрузки и выполнения.  
    • Предусмотрены специальные операторы для интерактивной разработки.  
  • Примеры кода

    • Парадокс дня рождения: вычисление наименьшего количества людей с вероятностью уникальных дней рождения менее 50%.  
    • Сортировка списка объектов-персон: определение класса person и метода отображения имени и возраста.  
    • Возведение в степень путем возведения в квадрат: использование макроса LOOP.  
    • Поиск списка доступных оболочек: использование макроса WITH-OPEN-FILE и функции AVAILABLE-SHELLS.  
  • Сравнение с другими языками

    • Common Lisp часто сравнивают со Scheme, но они имеют различия.  
    • Common Lisp использует лексическую переменную scope, в отличие от Scheme.  
    • CL поддерживает переменные с динамической областью действия, но они должны быть явно объявлены.  
  • Реализации и приложения

    • Существует множество реализаций Common Lisp, которые могут существенно отличаться.  
    • Реализации могут использовать компиляцию машинного кода, байт-кода или интерпретацию.  
    • Common Lisp используется для разработки исследовательских приложений, прототипов и коммерческих приложений.  
    • Примеры приложений включают Yahoo!, ACT-R, Authorizer’s Assistant, Cyc, Gensym G2, Genworks GDL, Jak and Daxter, ITA Software, Mirai и Opusmodus.  
  • История и развитие Common Lisp

    • Common Lisp (CL) — язык программирования, разработанный в 1980-х годах.  
    • CL основан на Lisp, но имеет более структурированный синтаксис и более развитую систему типов данных.  
    • CL стал популярным благодаря своей гибкости и возможности создания сложных систем.  
  • Применение Common Lisp

    • CL используется в различных областях, включая искусственный интеллект, компьютерную композицию, анализ самолетов и обработку сигналов.  
    • Примеры приложений: Piano, Grammarly, DART, Deep Space 1, SigLab, SPIKE, .NET Common Language Runtime.  
  • Инструменты и библиотеки

    • Quicklisp — популярный менеджер библиотек для CL.  
    • The Awesome CL list — список фреймворков и библиотек CL.  
    • CLiki — Вики-страница для систем CL с открытым исходным кодом.  
    • Common-Lisp.net — репозиторий бесплатного программного обеспечения CL.  
    • lisp-lang.org — документация и демонстрация историй успеха.  
  • Учебные материалы и ресурсы

    • Существует множество книг и учебных пособий по CL, включая руководства по программированию, объектно-ориентированному программированию и искусственному интеллекту.  
    • Примеры: Гай Л. Steele, Родни Аллен Брукс, Ричард П. Габриэль, Роберт Виленски, Юджин Чарняк и другие.  
  • Современные проекты и разработки

    • Современные проекты и разработки на CL включают ACL2, Аксиома, Maxima, OpenMusic, Pgloader, Stumpwm.  
    • Примеры современных проектов: ACL2, Аксиома, Maxima, OpenMusic, Pgloader, Stumpwm.  

Полный текст статьи:

Общий Лисп

Оставьте комментарий

Прокрутить вверх