Введение в Lisp
Статья не моя, она безвозмездно предоставлена мне Евтушенко Дмитрием. За что я ему очень благодарен. Прошу строго не судить, вероятно, это «проба пера».
Суть Lisp
Lisp — не только один из древнейших языков программирования, а так же первый функциональны язык программирования. Язык лисп не существует. Существуют различные диалекты лиспа. Диалекты лиспа отличаются только структурой базовых функций (например вывод в Common Lisp (print что-то) , а в Scheme (display что-то) . Писать код будем в онлайн-интерпретаторе Common Lisp.
Списки — наше все
Лисп работает на списках. Программа, написанная на лиспе, представляет из себя ряд списков. Списки представляются ввиде скобок, в которые через пробел вписаны элементы списка. Например, (1 2 3) . Элементами списка могут быть как другие списки, так и атомы — числа, название переменных/функций и т.д. Рассмотрим, как интерпретатор лиспа анализирует следующий список:
(+ 2 2) Шайтан машина берет первый элемент и проверяет, является ли он функцией. Остальные элементы являются аргументами функции. Таким образом, выражение вернет 4. Подобные выражения называются S-выражениями. Если какие-либо элементы списка являются S-выражениями, то они тоже будут вычислены. Например (+ 2 (* 2 2)) вернет 6. Передать аргумент в виде списка можно двумя способами: использовать функции quote или list . Первая просто вернет свой аргумент в чистом виде, вторая предварительно вычислит свои аргументы: (quote ((+ 1 2) (* 1 2))) -> ((+ 1 2) (* 1 2))
История программирования. LISP, Пол Грэм и причем здесь BEL
(list (+ 1 2) (* 1 2)) -> (3 2)
Hello world на Lisp
Чтобы убедиться что мы правильно понимаем как писать функции, комментарии в коде и выводить информацию на экран (да и вообще, работать в онлайн-интерпретаторе) — напишем функцию, печатающую на экране hello world и вызовем ее:
;;; hello world — функция (defun hello-world () (print «hello world») ) ;;; вызов функции (print «test hello world») (hello-world)
После трех «точек с запятой» в строке Lisp-программы размещаются комментарии. Мы можем также задавать имена параметрам:
;;; функция с параметрами (defun foo (test foo with parameters») (print (foo :a 1 :b 2 :c 3))
Проверка работы функции cons, которая добавляет элемент в начало списка. Перед списком (2 3) тут стоит кавычка (сокращенная форма функции quote ) — иначе такой список интерпретировался бы как вызов функции с именем 2 и аргументом 3:
(print «test cons ) (print (cons 1 ‘(2 3)))
Крылья, перья. . . Главное — хвост
Настало время познакомиться со структурой списка. Наберите в своем интерпритаторе (cons 1 2) . Он вернет вам (1 . 2) . Это cons-ячейка. Наберите (car (cons 1 2)) и (cdr (cons 1 2)) . Эти команды вернут 1 и 2 соответственно. Применим car и cdr к списку (1 2 3) :
(car (1 2 3)) -> 1
(cdr (1 2 3)) -> (2 3) Вывод: список является связкой нескольких cons-ячеек. Первый элемент называется головой, оставшиеся — хвостом. Хвост всегда оканчивается пустым списком.
Язык LISP для студентов и инженеров. Первая программа
03.05.2017 в 13:53 #3869
Хорошее начало, но мне кажется, что новичок зайдет, увидит «какие-то» списки, испугается и убежит. Есть предложение добавить (подумаем куда вставить) примеры. Начать можно с «hello world» и какой-нибудь простой игры типа «угадай число». Как смотрите на это?
31.10.2017 в 11:27 #4220
На самом деле в том топике всё неправильно:
как минимум:
во-первых: quote — не функция в терминалогии лиспа, а «специальная форма»,
во-вторых: лиспы отличаются между собой не только «структурой базовых функций», а порою много чем, например макро-системой, набором встроенных специальных форм, или «организацией» модульности, или, например, вообще синтаксисом (если взять например scheme, common lisp, clojure и emacs lisp, то у всех у них немножко отличается «reader» (в common lisp и в некоторых scheme-ах (по крайней мере в racket есть способ), он программируемый)), ну и: функциональность большинства диалектов лиспа под большим вопросом (например в common lisp половина функций не чистые, есть goto (причём и лексический, и динамический), есть присваивания (причём обобщённые), да и вообще side-эффекты вообщем-то никак не «локализуются» (в отличии от того же Haskell-я, например)). Ну это я так для справки. (Конечно это всё очень сложно как-то описать в 10 предложениях, но в результате, то что написано в топике выглядит не правдой, и не очень убедительно). P.S. пожалуй единственное, в чём проявляется «функциональность» лиспа (по крайней мере common lisp) это
первое: «first-class functions», и может быть то, что любое выражение, возвращает значение (на самом деле не совсем так) и второе: более менее «можно подставить что угодно куда угодно» в смысле нет деления на statement и expression,
так что можно написать например (+ (if nil 2 3) 4) и лисп вполне себе выдаст 7 несмотря на то, ‘+’ это обычная функция, а ‘if’ это специальная форма. Причём конкретно в common lisp порядок вычисления аргументов функции вполне определён (слева на право), поэтому можно (хотя наверное не нужно) вообще писать аргументы с побочными эффектами.
Что-то типа: (let ((tmp 1)) (+ (incf tmp) tmp)) всегда будет выдавать 4.
Источник: pro-prof.com
Что такое ЛИСП для Автокада?
После освоения основных принципов работы в AutoCAD необходимо избавиться от рутинных операций. Для этого существуют дополнительные приложения, написанные на языке программирования LISP. Отсюда и происходит название скриптов: лисп-приложения.
Все основные LISP-приложения уже давно разработаны для Автокада. Важно определиться, какие команды или функции будут полезны, после чего скачать само приложение и загрузить его в AutoCAD.
Программы Lisp для Автокада
LISP-приложение – это текстовый файл, который содержит подсказки от разработчиков и определенный код для выполнения команды. Файл имеет расширение *.lsp. Открыть его можно стандартным способом, кликнув дважды ЛКП по нему. Откроется «Блокнот».
Давайте рассмотрим конкретный пример. Возьмем LISP, который позволяет выравнивать текст в Автокаде по вертикали или горизонтали относительно указанной точки. Далее скачиваем скрипт: Выравнивание текстов.lsp
Команда весьма полезная, однако по умолчанию такой инструмент не предусмотрен. Для выравнивания 5-10 текстовых строк в чертеже уйдет определенное время. Поскольку вы будете повторять одни и те же действия несколько раз. Поэтому для упрощения эти действия можно выполнить одной командой (в данном случае Z-TEXT-ALIGN).
ЛИСП-программы для Автокада могут быть полезны на различных этапах выполнения проекта. Также следует учитывать специфику выполняемых работ. Так существуют лиспы для Автокада для геодезистов или проектировщиков, использование которых характерно для конкретной области.
Источник: autocad-specialist.ru
ЛИСП для AutoCAD
После освоения основных принципов работы в AutoCAD возникает необходимость избавиться от рутинных операций, которые, в зависимости от специфики выполняемых задач, могут занимать много времени. Для этого существует дополнительные приложения, написанные на языке программирования LISP. Отсюда и происходит название скриптов: лисп-приложения.
Если тема программирования далека от вас не стоит расставаться. Все основные LISP-приложения уже давно разработаны для Автокада. Все что вам остается сделать – это определиться, какие команды или функции будет вам полезны, после чего скачать само приложение и загрузить его в AutoCAD.
Программы Lisp для Автокада
LISP-приложение – это ничто иное как текстовый файл, который содержит подсказки от разработчиков, а также определенный код для выполнения команды. Файл имеет расширение *.lsp, а открыть его можно стандартным способом, кликнув дважды ЛКП по нему. Откроется «Блокнот».
Давай рассмотрим конкретный пример. Возьмем LISP, который позволяет выравнивать текст в Автокаде по вертикали или горизонтали относительно указанной точки . Скачать скрипт: Выравнивание текстов.lsp
Согласитесь, команда весьма полезная, однако по умолчанию такой инструмент не предусмотрен. Если перед вами стоит задача выровнять 5-10 текстовых строк в чертеже, то на это уйдет определенное время, а главное, вы будете повторять одни и те же действия несколько раз. А вот, как эти действия можно выполнить одной командой (в данном случае Z-TEXT-ALIGN ).
Как видно, ЛИСП-программы для Автокада могут быть полезны на различных этапах выполнения проекта. Также следует учитывать специфику выполняемых работ. Так существуют лиспы для Автокада для геодезистов или проектировщиков, использование которых характерно для конкретной области.
Нет никакого смысла устанавливать все скрипты, которые вы найдете в интернете. Сначала ознакомьтесь, какую функцию они выполняют, а затем задайте себе вопрос «Можно ли это Lisp-приложение адаптировать к вашей работе?».
Как подгрузить Лисп в Автокад
Выше мы уже рассмотрели, что из себя представляет LISP-приложения для AutoCAD. Теперь давайте рассмотрим, как его внедрить в работу.
Для Автокада доступны приложения со следующим расширением файла: *.arx, *.crx, *.lsp, *.dvb, *.dbx, *.vlx, *.fas. Рассмотрим на примере ЛИСПа, который позволяет выравнивать текст относительно указанной точки по оси X или Y (скачать файл «Выравнивание текста .lsp»).
ПРИМЕЧАНИЕ:
Если вы скачиваете LISP-приложение, которое было запаковано в архив, обязательно разархивируйте его, чтобы сам файл перед загрузкой хранился на вашем компьютере.
Как установить файл *.lsp в Автокад?
- Перейдите во вкладку «Управление» и на панели «Приложения» выберите команду «Загрузить приложение». Можно воспользоваться командной строй в Автокаде и ввести «_appload».
- Откроется диалоговое окно «Загрузка/выгрузка приложений», через которое вам нужно найти подходящий файл с расширением *.lsp или др, которое было перечислено выше.
ПРИМЕЧАНИЕ:
Чтобы файл загружался каждый раз при запуске Автокада в разделе «Автозагрузка» также необходимо указать путь к этому скрипту (кнопка «Добавить»). В противном случае вы выполните одноразовую загрузку, которая не сохранится при закрытии программы.
3. После проделанных действий нажмите кнопку «Загрузить».
4. После того как внизу этого диалогового окна появиться сообщение об успешной загрузке, можно тестировать установленное приложение. Нажмите кнопку «Закрыть».
Как запустить команду приложения lisp?
В AutoCAD lisp команды посмотреть нельзя. Следует отталкиваться от исходного файла, который был загружен в программу.
Ранее мы говорили, что файл скрипта можно открыть через обычный «Блокнот». Как правило, в самом верху этого текстового документа разработчики оставляют всю необходимую информацию для работы, в том числе и название команды, которая будет запускать ЛИСП. В данном примере это «z-text-align», поэтому в командную строку нужно вводить именно такой запрос для вызова инструмента.
ПРИМЕЧАНИЕ:
Если автор не оставил подсказку с названием команды, то вы ее можете найти в коде. Она будет находиться в строчке «defun c: z-text-align», как показано на рис. 4.
Далее следуйте указаниям командной строки и пошагово выполняйте запросы установленного скрипта. Как правило, все достаточно интуитивно понятно.
Как подгрузить lisp в Автокад LT?
С вопросом: «Как установить лисп в Автокад» все понятно. Но, как его загрузить в схожие программы, например, Автокад Electrical/Mechanical?
К сожалению, приложения, написанные на AutoLISP, работают только на полной версии программы AutoCAD. Поэтому такие скрипты нельзя внедрить в AutoCAD LT или др. версии.
Исключением могут являться специализированные приложения типа LT Extender и подобные ему, которые были разработаны чтобы запускать файлы *.lsp или *.arx непосредственно в среде Автокад LT.
Как сделать кнопку в Автокад для LISP-приложения
Создание кнопки в Автокаде необходимо, когда вы используете сторонние приложения lisp и скрипты. Это связано с тем, что не всегда удобно обращаться к инструменту через командную строку, особенно если вы часто пользуетесь какой-то опцией.
Ранее мы рассмотрели, что из себя представляют LISP-приложения для Автокада и как загружать дополнительные скрипты. Осталось узнать, как создать кнопку в Автокаде с новой командой и разместить ее на ленте для быстрого доступа.
Однако создание кнопки доп. скрипта имеет некоторые нюансы, которые мы сейчас разберем.
Создаем новые кнопки в Автокаде для запуска LISP
Чтобы добавить кнопку в Автокад для новой команды, которая была загружена в программу, нужно:
- Прописать путь к файлу, который содержит загружаемое приложение. Напомню, такие файлы могут иметь расширение *.arx, *.crx, *.lsp, *.dvb, *.dbx, *.vlx, *.fas.
Для этого вызовите диалоговое окно «Настройки» (можно через командную строку «_options»). Перейдите во вкладку «Файлы», выберете папку «Доверенные местоположения». Затем нажмите кнопку «Добавить». Появится дополнительное поле, в котором необходимо прописать путь. Далее нажмите «Обзор».
Найдите на компьютере папку, в которой хранятся ваши файлы-lisp. После того как путь пропишется в этом диалоговом окне, нажмите ОK.
ПРИМЕЧАНИЕ:
До 2013 версии Автокада папка «Доверенные местоположения» отсутствовала. Если у вас более ранняя версия программы — используйте папку «Путь доступа к вспомогательным файлам». При этом обязательно не забывайте нажать кнопку «Добавить», чтобы не сбить настройки AutoCAD по умолчанию. В противном случае вы можете случайно заменить доступ к системной папке, что повлечет последствия!
- Вызвать окно адаптации пользовательского интерфейса Автокад (можно через командную строку «_СUI»). Создать новую команду.
Задать ее название, а также макрос. Если с именем все понятно, то код макроса следует искать в самом файле приложения. Напомним, открыть его можно через обычный блокнот.
Далее выберите иконку для кнопки. Можно создать свою или отредактировать уже имеющуюся картинку.
- Заключительныйэтап создания новой кнопки для AutoCAD – это размещение ее в ленте программы. Для этого нужно воспользоваться поиском: найти вновь созданную кнопку после чего захватить ее левой кнопкой мыши и переместить в подходящую панель. В этом примере: ACAD → Лента → Панели → Главная 2D Рисование → Строка 3.
Источник: stroymetproekt.ru
Лисп
Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Лисп был создан Джоном Маккарти для работ по искусственному интеллекту и до сих пор остаётся одним из основных инструментальных средств в данной области. Применяется он и как средство обычного промышленного программирования, от встроенных скриптов до веб-приложений массового использования, хотя популярным его назвать нельзя.
Это один из старейших (наряду с Фортраном и Коболом) используемых по сей день высокоуровневых языков программирования [2] , а также первый из сохранившихся в использовании языков, использующих автоматическое управление памятью и сборку мусора [3] .
Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но начиная уже с ранних версий обладает также чертами императивности, к тому же, имея полноценные средства символьной обработки, позволяет реализовать объектно-ориентированность; примером такой реализации является платформа CLOS.
Является языком системного программирования для так называемых лисп-машин, производившихся в 1980-е годы, например, фирмой Symbolics [en] .
Наряду с языком Ада Лисп прошёл процесс фундаментальной стандартизации для использования в промышленности, в результате чего появился диалект Common Lisp, впоследствии стандартизованный ANSI. Его реализации существуют для большинства платформ.
- 1 Архитектура и синтаксис
- 1.1 Основные элементы языка
- 1.2 Базовые символы, операторы и функции
- 1.3 Типизация
- 2.1 Функциональное программирование
- 2.2 Императивное (операторное) программирование
- 2.3 Макропрограммирование
- 2.4 Объектно-ориентированное программирование
- 3.1 Предпосылки
- 3.2 Первые реализации
- 3.3 Диалекты 1960-х — 1980-х годов
- 3.3.1 MacLisp
- 3.3.2 Interlisp
- 3.3.3 PSL
- 3.3.4 Franz Lisp
- 3.3.5 Scheme
- 3.3.6 Zetalisp
- 3.3.7 NIL и T
- 3.5.1 ISLISP
- 3.5.2 OpenLisp
- 3.5.3 PicoLisp
- 3.5.4 EuLisp
- 3.5.5 newLisp
- 3.5.6 Racket
- 3.5.7 Arc
- 4.1 Основные особенности
- 4.2 Дальнейшие модификации
Источник: wiki2.org