Все потоки
Поиск
Написать публикацию
Обновить
0

Lisp *

Старейший высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Nikodemus' Common Lisp FAQ

Время на прочтение11 мин
Количество просмотров12K
Nikodemus' Common Lisp FAQ


Последнее обновление: 2012-04-13

Это очень неофициальное ЧаВО по языку Common Lisp, отражающее субъективное мнение Nikodemus Siivola. Этот текст частично основан на других ЧаВО, встречавшихся на просторах интернета и comp.lang.lisp.
Если вы думаете, что я воспользовался вашим текстом, буду рад признаться в этом, поэтому пишите на nikodemus@random-state.net.
Текущая версия этого ЧаВО доступна по следующим адресам:
http://random-state.net/files/nikodemus-cl-faq.txt
http://random-state.net/files/nikodemus-cl-faq.html
ЧаВО также периодически публикуется в comp.lang.lisp.
Читать дальше →

Преимущества Common Lisp

Время на прочтение15 мин
Количество просмотров35K
Лисп часто рекламируют как язык, имеющий преимущества перед остальными из-за того, что он обладает некоторыми уникальными, хорошо интегрированными и полезными фичами.

Далее следует попытка выделить набор особенностей стандартного Common Lisp, кратко и с примерами.

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

Текст по большому счёту основан на списке особенностей CL и обзоре CL Роберта Стренда (Robert Strandh).
Читать дальше →

Конспект монографии по λ-исчислению

Время на прочтение7 мин
Количество просмотров5.9K
Данный текст представляет собой чрезвычайно сжатый конспект классической монографии по λ-исчислению (Х. Барендрегт, «Ламбда-исчисление. Его синтаксис и семантика», перевод с английского Г. Е. Минца под редакцией А. С. Кузичева, Москва, «Мир», 1985). Он может оказаться интересен всем тем, кто планировал взяться за систематическое изучение данной темы, уже в общих чертах ознакомившись с ней, но откладывал из-за сложной структуры основной монографии, определения и основные результаты в которой довольно разрозненны. Здесь мы попытаемся сделать изложение, напротив, абсолютно линейным, и, конечно, несравнимо более коротким, избегая лишних определений и примеров, а сосредоточившись на необходимых терминологии, обозначениях и утверждениях, которые, в свою очередь, изложены близко к оригинальному тексту. Мы начнем от определения системы λβη, то есть классического бестипового экстенсионального λ-исчисления. Затем перейдем к комбинаторной логике, теореме о неподвижной точке и синтаксическому сахару. Наконец, заключительная часть конспекта — построение топологии на выражениях этой системы, призванной объяснить кажущееся противоречие: отображения множества выражений в себя содержатся в самом этом множестве при его счетности. На самом же деле, множество наделяется надлежащей топологией, в которой выражения представляют собой непрерывные отображения.
Читать дальше →

HomeLisp два года спустя

Время на прочтение2 мин
Количество просмотров3.7K
Прошло ровно два года с момента публикации на Хабре статьи про HomeLisp. Та статья, которую запостил мой сын, вызвала довольно бурное обсуждение и яростные нападки определенной части аудитории.

Что же произошло за эти два года с проектом?
Читать дальше →

Пишем веб-сервер на Common Lisp часть вторая

Время на прочтение8 мин
Количество просмотров4.1K
В прошлой статье мы начали разработку нашего веб-сервера. Продолжим c файлом util.lisp. В этом пакете будут находится все наши вспомогательные функции для обработки запросов. Для начала обьявим переменную *line*, она нам понадобится в дальнейшем.
Читать дальше →

Пишем веб-сервер на Common Lisp часть первая

Время на прочтение8 мин
Количество просмотров8.6K
Не так давно я взялся за изучение Common Lisp. Как может показаться, изучение нового языка программирования — дело весьма не простое, тем более если он совсем непохож на все те языки, с которыми приходилось сталкиваться ранее. Поэтому я решил начать с книги Land Of Lisp. Книга весьма неплохая, с интересными картинками и очень хорошо подходит для начинающих. В одной из глав было описание создания веб-сервера на Common Lisp. Я решил слегка развить эту тему, и в итоге у меня получилось не совсем то, что было описано в этой главе, а весьма интересный веб-сервер. Исходные коды можно посмотреть тут.

Для его написания нам понадобится Linux с установленными emacs, sbcl, slime и quicklisp. Описывать, как это всё устанавливать, настраивать и как этим пользоваться, я не стану — в интернете есть множество статей об этом. Весь наш веб-сервер будет находиться в одном пакете, называемом myweb. Создайте у себя папку с данным названием, и в ней создайте две папки log и web. Папка log будет содержать лог-файл веб-сервера. В папке web будут лежать html-страницы и изображения, которые веб-сервер будет отдавать клиентам. Весь веб-сервер состоит из семи файлов.
Читать дальше →

Несколько причин освоить CL даже если вы не планируете писать на нем в будущем

Время на прочтение3 мин
Количество просмотров8.2K
Наверное, эту статью стоило опубликовать перед предыдущими двумя, в этом моем цикле про Common Lisp, но лучше уж поздно, чем никогда.

Когда-то давно, когда я читал статьи Пола Грэма, и только начинал изучать CL, я довольно скептически относился к утверждению о том, что лисп позволяет понять другие языки лучше, да и вообще, программист, знающий CL, выучит любой другой язык максимум за пару недель, и будет на нем писать еще лучше, чем на нем пишет большинство людей, знающих этот язык уже пару лет.

Но сейчас я пришел к выводу, что это утверждение всё же верно.
Читать дальше →

Настройка SBCL и среды разработки SLIME под Windows. Пошаговое руководство

Время на прочтение9 мин
Количество просмотров22K
В данной статье я подробно опишу как установить и настроить SBCL и окружение для продуктивной разработки под Windows.

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

Читать дальше →

Коды возврата vs исключения: взгляд с колокольни

Время на прочтение4 мин
Количество просмотров2.6K
Просмотрев пост Коды возврата vs исключения и комментарии к нему, я заметил, что в обсуждении упущена одна нить, краткий тезис которой следующий: в некоторых языках такая проблема даже не стоИт, т.к. вопрос «что выбрать, коды возврата или исключения» в таком языке является низкоуровневым. Как, например, не стоит вопрос, каким образом реализовать конструкцию «foreach». Т.к. для программиста, использующего тот же «foreach», нет никакой разницы, использовали ли создатели языка while или for или что-то еще в имплементации данного оператора. Главное это паттерн, который представляет собой этот самый оператор.

Хватит рассуждать про foreach. Покажу непосредственно на примере два очень похожих друг на друга оператора, один из которых использует в качестве реализации «исключения», другой — «коды возврата».
Читать дальше →

Обобщенные функции CLOS

Время на прочтение4 мин
Количество просмотров3.9K
Любой разработчик, так или иначе столкнувшийся с объектно-ориентированным программированием, и попытавшийся в нем разобраться, обязательно слышал про CLOS, объектную систему языка Common Lisp, одной из основополагающих фич которой являются так называемые «обобщенные функции», или, в народе, «мультиметоды».

Хотя многие считают, что обобщенные функциии это просто аналог статической перегрузки функций, но только в динамике, это совершенно неверно.
Не совсем правильно будет даже сказать, что это расширение диспетчеризации по self/this, то есть «виртуальных функций», на несколько аргументов.

Безусловно, множественная диспетчеризация является одной из основных фишек обобщенных функций, но сама их суть не только, и даже не столько, в этом.
Читать дальше →

Программирование музыки на Лиспе

Время на прочтение1 мин
Количество просмотров6.9K
Сэм Арон (Sam Aaron), один из разработчиков Overtone, выложил впечатляющее видео, как он синтезирует мелодии в редакторе Emacs, используя различные приёмы — триггеры инструментов, назначение будущих событий и проектирование сэмплов — на языке Clojure. Музыка звучит сразу после написания строчки кода (live coding).

Будущее Лиспа

Время на прочтение4 мин
Количество просмотров6.3K
Это перевод статьи Стивена Дегутиса.

Будущее Lisp


В последнее время я часто стал задумываться о существующих диалектах Lisp и о том, в каком направлении мы двигаемся. В частности, я рассматривал возможность написания очередного диалекта Lisp, и те сферы, в которых бы он пригодился.

Если вы еще не знакомы с ним, Lisp является замечательным семейством языков; его чрезвычайно минималистический синтаксис позволяет нам думать практически на уровне алгоритмов, не заморачиваясь по поводу неочевидного синтаксиса или каких-либо языковых рамок.

Положение на рынке


Традиционно, существует Scheme, который полезен разве что для преподавания в вузах из-за скудности поддерживаемых библиотек, есть также Common Lisp, который представляет из себя ужасную, страшную неразбериху (представьте C++, но с целым морем скобок).
Читать дальше →

Установка common lisp на правах пользователя

Время на прочтение5 мин
Количество просмотров3.1K
made with lisp
Есть проблема: На рабочих серверах (у нас используется политика тонких клиентов, толстых серверов) не установлено никакой lisp машины, и я, разумеется, не администрирую их.
На ум сразу приходят 2 решения:
  • Уговорить администратора.
  • Справиться самостоятельно.

Первый вариант подходит для настоящих внедренцев. Я к сожалению не владею достаточными аргументами, почему вдруг все терминальные сервера должны обзавестись ещё и лисп машиной.
Поэтому здесь пойдёт речь о втором варианте. (А именно о ECL на linux в custom каталоге).
Читать дальше →

Ближайшие события

Использование mongo-cl-driver в качестве провайдера БД mongo на common-lisp

Время на прочтение6 мин
Количество просмотров2.3K




Здравствуйте, все любители common-lisp.

В этой статье я расскажу вам о своем опыте внедрения common-lisp библиотеки доступа к объектной СУБД mongo, которая называется mongo-cl-driver.

Начитавшись в интернете про то, насколько mongo-db быстр, масштабируем и крут и имея далекий и очень скудный опыт взаимодействия с данной БД на с++, я решил попробовать эту БД в своем веб-ориентированном проекте, написанном на common-lisp. Имея, однако, некоторые сомнения в правильности выбора СУБД, могу назвать свой опыт удачно свершившимся, поскольку реализованный функционал как минимум работает.

Любой человек, который начинает программировать доступ к СУБД mongo так или иначе натыкается в интернете на ссылки на cl-mongo — первый появившийся провайдер доступа к БД mongo на common-lisp. Используя cl-mongo в своем проекте, я наткнулся на ряд проблем c преобразованием данных в json, которые начались, когда возникла необходимость перевода результатов запроса по цепочке СУБД->common-lisp-сервер->javascript-клиент. Кстати для подобного кодирования/декодирования существуют известные мне библиотеки:

1) yasson
2) cl-json

Далее по тексту следует несколько примеров использования mongo-cl-driver для общих задач программирования доступа к СУБД mongo на common-lisp. Если примеры покажутся читателю малопонятными, выдранными из контекста, то есть возможность посмотреть примеры использования в доступных
Читать дальше →

Lisp разработчик: две стороны одной медали

Время на прочтение6 мин
Количество просмотров21K
Я уже около 20 лет программирую на Lisp и прочитал множество сообщений Usenet и статей в блогах, написанных Lisp — разработчиками. Я часто задавал себе вопрос — А существует ли типичный Lisp — разработчик, как существуют типичные представители наций или других групп людей?

После некоторых размышлений, я пришел к выводу, что определенно существует, и этот характер влиял на историю развития языка, его сильные и слабые стороны. Так родилась эта статья, которая без сомнений кого-то заденет и подтолкнет спору.
Читать дальше →

GIMP Script-fu: быстрое изучение и написание простых скриптов на Scheme (+ пакетная обработка бесплатно)

Время на прочтение8 мин
Количество просмотров26K

Вступление


В статье будет рассказано о том, как в кратчайшие сроки познакомиться с основами скриптинга в GIMP на языке Scheme и приступить непосредственно к решению простых практических задач. Данный материал предназначен лишь для тех, кто собирается автоматизировать рутинную обработку здесь и сейчас, не сильно вдаваясь в тонкости и не жертвуя драгоценным временем. Также, статью не рекомендуется использовать в качестве пособия по Scheme отдельно от Script-fu. Связано это с упрощённым стилем программирования в данном материале и отсутствием освещения других немаловажных фактов, которые нас сейчас волнуют гораздо меньше, чем скорость освоения.

Содержание:
  1. Что нам понадобится?
  2. Коротко о синтаксисе
  3. Переменные
  4. Функции
  5. Списки
  6. Регистрация скрипта в GIMP
  7. Написание кода
  8. Заключение
Читать дальше →

GUI в Common Lisp — еще один миф

Время на прочтение2 мин
Количество просмотров11K
Бытует расхожее мнение, что в Common Lisp нет или же плохая поддержка графики. Это еще один миф из серии, что Lisp — это язык только для подсчета факториалов. На самом деле, как и в большинстве других прикладных сфер общего назначения (например, веб, форматы передачи данных, взаимодействие с БД и т.д.) в Lisp-среде есть полный спектр библиотек и тулкитов для всех основных платформ с разными уровнями абстракции.

Linux/Unix


Базовой библиотекой для графики из Common Lisp под Unix является CLX. Это аналог xlib, т.е. низкоуровневый клиент, напрямую общающийся по X-протоколу.

Кроме того, есть обертки для основных графических фреймворков разной степени зрелости: LTK, CL-GTK2, CommonQt, CL-CAIRO2. Лично мне доводилось иметь дело с LTK, и работа с ним тривиальна. Хороший пример приложения, его использующего — простой и удобный Lisp-редактор/REPL ABLE.
ABLE screenshot

Windows


Кроме возможности использовать кросс-платформенные фреймворки из прошлого раздела, есть еще LispWorks CAPI, о котором только положительные отзывы. Единственная особенность заключается в том, что, как и большинство профессиональных сред разработки на любых языках под Windows, LispWorks стоит довольно дорого (ок. 1200 $), а CAPI доступна только в профессиональной версии. (Впрочем, попробовать его можно и в trial версии).

Также есть CL-OPENGL, которая, разумеется, кросс-платформенная.

Читать дальше →

Clojure и Project Euler, часть 2

Время на прочтение4 мин
Количество просмотров2.9K
В предыдущей статье (Clojure и Project Euler, часть 1) я описал решение первых 3 задач из проекта Эйлер с использованием clojure — достаточно молодого языка, но имеющего известных родителей.
В этой статье я продолжу знакомить читателя (да и себя тоже) с этим забавным джава-лиспом. И покажу решение ещё 3 несложных задач из Эйлера.
Читать дальше →

Clojure и Project Euler, часть 1

Время на прочтение4 мин
Количество просмотров5.9K

Предисловие


Недавно я начал изучать язык Clojure. Заинтересовал меня он потому, что это диалект lisp'a, выполняющийся на jvm. Сам я программирую на java, а lisp удивил меня своими скобочками. И тут такая смесь интересная. Да и с функциональным программированием тоже хотел познакомиться. Но тут же появилась проблема: как изучать clojure? Надо на нём что-то писать… А что? И пришёл к выводу, что очень удобно при изучении языка решить какие-нибудь несложные математические задачки: и к синтаксису привыкнешь, и с функционалом немного познакомишься. Для этого очень хорошо подходит Project Euler. Здесь я попробую показать, как начать работать с clojure и решить пару задач на нём. Я новичок в функциональном программировании и lisp'е, так что буду очень рад увидеть решения более близкие и красивые с точки зрения функционального и lisp'а.
Читать дальше →

HomeLisp

Время на прочтение3 мин
Количество просмотров8.7K
Недавно мой отец закончил разработку своей реализации языка LISP под Windows. Проект называется HomeLisp. Для того, чтобы проект был доступен любителям LISP-а был создан простейший сайт, куда будут выкладываться обновления, документация и где отец будет отвечать на вопросы пользователей. Собственно передаю ему слово.

HomeLisp – простой, свободно распространяемый Лисп на платформе Windows!


Среди языков программирования, разработанных к настоящему времени, имеется один совершенно уникальный. Это язык Лисп.

Идея, лежащая в основе Лиспа, чрезвычайно красива: все конструкции языка (программы и данные) представляются с помощью единой универсальной структуры – списка. Методология программирования на Лиспе в корне отличается от методологии программирования на традиционных языках (типа Си или Паскаля).

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

Языки, появившиеся после Лиспа, превзошли Лисп по изобразительным возможностям… но по соотношению «сила/простота» рекорд Лиспа не побит до сих пор!

Лисп – абсолютно не попсовый, элитарный язык программирования. И не удивительно, что хотя с момента его изобретения Дж. МакКарти прошло уже более 50 лет, Лисп жив по сей день! Далеко не каждому языку суждена столь долгая жизнь, – где сейчас Алгол-60 (которому пророчили большое будущее)? А по Лиспу издаются книги (к сожалению, не на русском языке…); появляются новые и новые реализации Лиспа на разных аппаратных платформах.

Одну из таких простых реализаций Лиспа и предлагает автор этих строк.

Читать дальше →