Обновить
2.75

Lisp *

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

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

Что вы знаете о символьном программировании?

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров18K

Кликбейтный заголовок, риторический вопрос и обещание раскрыть тайну! Не самый лучший набор, но нормального названия для статьи мне в голову не пришло. Что же здесь все таки будет? Речь пойдет о реализации символьного программирования в Wolfram Language (WL). Я не буду рассказывать про отличия от других парадигм. А также здесь точно не будет общих определений. Вместо этого я попытаюсь ответить на несколько вопросов исходя из своего личного опыта и наблюдений.

Внимание! Я не математик и не знаю haskell и lisp! И буду рад если меня поправят настоящие математики, которые с ними знакомы.

Читать далее

Язык Janet для смертных. Часть 1 — Значения и ссылки

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров4.3K

Это первая глава перевода небольшой книги о языке Janet за авторством Иана Генри (Ian Henry). В этой книге раскрываются различные аспекты работы с языком, обьяснение синтаксиса и некоторых приемов программирования.

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

Читать далее

Геймдев на Lisp. Часть 1: ECS и металингвистическая абстракция

Уровень сложностиСредний
Время на прочтение30 мин
Количество просмотров8.2K

В данной серии практических руководств мы подробно рассмотрим создание несложных 2D-игр на Common Lisp. Результатом первой части станет настроенная среда разработки и простая симуляция, отображающая двумерную сцену с большим количеством физических объектов. Предполагается, что читатель владеет некоторым языком программирования высокого уровня, в общих чертах представляет, как на экране компьютера отображается графика, и заинтересован в расширении своего кругозора.

Common Lisp — язык программирования с богатой историей, предоставляющий эффективные инструменты для разработки комплексных интерактивных приложений, каковыми являются видеоигры. Данная серия руководств ставит перед собой задачу наглядно продемонстрировать ряд возможностей CL, отлично вписывающихся в контекст разработки игровых приложений. Общий обзор таковых возможностей и особенностей Common Lisp приводится в статье Юкари Хафнер "Использование высокодинамичного языка для разработки".

Многие возможности, впервые появившиеся в Lisp, такие, как условный оператор if/then/else, функции как объекты первого класса, сборка мусора и другие давно перекочевали в мейнстримные языки программирования, однако есть одна уникальная возможность, которую мы рассмотрим сегодня, и это — металингвистическая абстракция.

Читать далее

LISP в космосе

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров4.5K


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


Эта история о том, что произойдёт, если человек, страстно увлечённый LISP, попадёт в организацию, где на нём не принято писать софт.


Эта история о том, как LISP попал в космос.


На дворе 1988 год. СССР всё ещё существует. Рональд Рейган — президент США. А Рон Гаррет под началом своего научного руководителя работает над прототипом первого марсохода.

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

LISP — исследование оригинального языка ИИ

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров5.1K

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

В предыдущей части нашей серии, посвященной классическим языкам программирования, мы рассмотрели ALGOL, а в этом месяце мы углубились в изучение другого архаичного языка - LISP. Однако то, что оба они появились в 1950-х годах, - это практически единственное, что их объединяет; в большинстве других аспектов они не могут быть более разными. Скорее всего, практически все языки, которыми вы когда-либо пользовались, относятся к типу императивных. LISP же является декларативным языком. Проще говоря, программирование на императивном языке предполагает определение набора операций, которые при последовательном выполнении обеспечивают требуемую функциональность. требуемую функциональность. Тот факт, что существует альтернатива, может вызвать удивление, но в декларативном языке конечный результат определен, а система сама решает, как достичь поставленной цели.

Эти два подхода можно сравнить с инструкциями, прилагаемыми к мебели для самостоятельной сборки. При императивном подходе инструкция представляет собой подробный перечень указаний, а при декларативном методе вам просто показывают картинку собранной мебели. На самом деле, это не первое знакомство с декларативным программированием за последние месяцы. Чуть ранее мы познакомились с языком Prolog, который практически канул в Лету в 1980-х годах, а затем вновь стал популярным благодаря Al-революции.

Читать далее

96 лет со дня рождения Джона Маккарти

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.1K
«Не вижу в человеческом интеллекте ничего такого, что бы человечество не могло бы понять».

Джон Маккарти — фигура, без преувеличения, легендарная. Создатель термина “искусственный интеллект”, основоположник функционального программирования и создатель языка LISP… Список можно продолжать долго.

image

Мы сегодня хотим остановиться на одном из значимых эпизодов в жизни Маккарти — его многолетней дружбе с Андреем Петровичем Ершовым. Их переписка и совместная работа во времена, когда американец и советский гражданин находились по разные стороны баррикад — яркий пример того, что для настоящей науки и её последователей нет никаких границ.
Читать дальше →

Знакомство с упорядочиванием в Emacs на примерах

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров4.2K

В этой статье мы разберём использование в Emacs различных команд для упорядочивания строк, абзацев и страниц. В руководствах к Emacs и Elisp эти команды описаны достаточно подробно, так что мы просто познакомимся с практическими примерами их применения.
Читать дальше →

История T

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров4.5K

Олин Шиверс


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

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

Использование высокодинамичного языка для разработки

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров7K

Преимущества и навыки, полученные при использовании Common Lisp в разработке игр



Разработка игр является увлекательной задачей. Игры требуют быстрого цикла разработки, высокой интерактивности и задают ограничения мягкого реального времени. Хотя в настоящее время небольшие игры разрабатываются на таких динамических языках, как Python или Lua, традиционно игровые движки пишутся на статических языках вроде C++ и C с каким-либо скриптовым языком поверх для обработки геймплейных механик. Common Lisp предоставляет среду разработки, одновременно являющуюся динамичной и достаточно производительной, что позволяет построить с её помощью полноразмерную систему разработки игр, сильно способствующую быстрым итерациям разработки и модульному дизайну.

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

Рекурсивное название небольшой статьи о рекурсии

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров9.6K

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

Читать далее

Добавляем генераторы в Common Lisp

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

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

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

Квазицитирование в Lisp

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

Аннотация


Квазицитирование (quasiquotation) — это технология, обычно используемая в Lisp для создания программ, генерирующих другие программы. В статье объясняется механизм работы квазицитирования, поясняется почему он работает именно так и каковы его ограничения, а также даётся экскурс в историю квазицитирования.

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

Пишем мультиметоды из Lisp в С++

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


В статье разберёмся что такое мультидиспетчеризация и как её можно воссоздать на С++

Читать далее

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

Цитирование в языках программирования

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

Задачу я встретил, решая упражнения из книги Структура и Интерпретация Компьютерных Программ).

Раздел 2.3 посвящён цитированию в LISP и символическим вычислениям.

Обычные — несимволические — вычисления сводятся к расчётам с помощью арифметических операций. Если я попрошу вас вычислить производную функции x^2в точке x=17, вы можете сделать это по формуле при каком-нибудь не очень большом значении dx.

Подробнее о символических вычислениях

Язык-головоломка Marthue

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

Предлагаю читателям Хабра "эзотерический" язык программирования, обобщающий нормальные алгоритмы Маркова (НАМ) и полусистемы Акселя Туэ (semi-Thue systems). В языке есть возможность интерактивного ввода и вывода, выбора поиска замены подстрок с начала, конца строки или случайным образом, условного рекурсивного вызова одного блока подстановок из другого, а также условного перехода между блоками. Это позволяет совмещать подстановку строк с элементами императивного и даже функционального программирования, а также исследовать недетерминированные алгоритмы.

Интерпретатор написан под Линуксом на языке Common Lisp, который я считаю одним из самых мощных и удобных, в том числе для экспериментальногого программирования. При желании большого труда не составит переписать его на любом популярном языке: например, сделать онлайновую версию в Javascript. Просто для запуска программ Лисп знать практически не нужно: достаточно инсталлировать любую версию Common Lisp и ввести нужный файл парой простых функций. Скачать репозиторий интерпретатора Marthue можно здесь.

Читать далее

Как начать писать приложения на ClojureDart

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

16 апреля зарелизился ClojureDart, а это значит, что для любителей Clojure открылась возможность писать мобильные, веб- и десктоп-приложения на Flutter. Зачем использовать для этого Clojure, как бы очевидно это ни было, выходит за границы фокуса статьи.

На текущий момент инструменты еще не отшлифованы, нет репла(!) и автодополнений для dart-интеропа, но пользоваться можно, и некоторые плюшки кложуры уже показали себя (например, nest-макрос, убирающий проблему вложенности).

В этой статье хочу рассказать, как написать свое первое flutter-приложение на Clojure, какими инструментами удобно пользоваться, где искать ответы на вопросы. Статья для тех, кто имеет хотя бы минимальный опыт работы с Clojure.

Читать далее

Библиотека для создания веб-приложений OMGlib, как это работает?

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

В предыдущем посте я, немного сумбурно, рассказал про библиотечку OMGlib, которая позволяет создавать полностью динамические веб-приложения. Вкратце, идея состоит в следующем: приложение использует браузер для взаимодействия с пользователем, для этого браузер открывает WebSocket-соединение с сервером, после чего просто выполняет получаемый от него javascript-код, отправляя результаты обратно через это же соединение. Все DOM-элементы при этом создаются динамически, через соответствующие функции javascript, без использования HTML вообще. Также, сервер может создавать функции в браузере и вызывать их, сгружая, таким образом, всю логику и механику, связанную с интерфейсом, прямо в браузер. Библиотечка реализована на языке Common Lisp, развитая система макросов которого позволяет писать код единообразно, просто помечая часть функций как browser-side, а компиляция их в JS происходит при помощи JSCL прозрачно для программиста.

Казалось бы, что тут может пойти не так?

LISP-пакет OMGlib или вперёд к Web 3.0

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

Я довольно много программирую, но результатом моей работы обычно
является то, что программа выдает, а не сама программа, как таковая.
Потому, как правило, все мои программы консольные и не имеют никакого
интерфейса. Однако, иногда интерфейс всё же нужен и я в таких случаях
обычно конструирую простейший web-фроненд, бесконечно страдая в рамках
модели MVC. Однажды, размышляя над эволюцией мировой Сети я подумал, а
почему бы не довести идею сайта-как-приложения до логической
завершенности, отказавшись от HTML вообще?

И тут мне в руки попался Common Lisp...

Удивительное приключение в стране оптимизирующих компиляторов

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

Приглашаю вас в небольшое приключение выходного дня, в котором никто никому ничего не будет доказывать. Мы просто будем реализовывать один и тот же несложный алгоритм, разыскивающий простые числа в некотором диапазоне, на нескольких языках программирования: C, C++, Scheme и Python - и смотреть, что этим кодом могут сделать современные оптимизирующие компиляторы. В процессе приключения мы увидим, что «динамический» не означает «совсем уж медленный», и посмотрим на приёмы программирования на Scheme, что, как мне кажется, можно сравнить с путешествием на экзотический остров.

Читать далее

Delinking и Lisp

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

Экономический термин delinking впервые (насколько я смог отследить) использовал Самир Амин в работе 1984-го года Delinking: Towards a Polycentric World для обозначения процесса выхода из системы глобального разделения труда. По многочисленными (для нашего немногочисленного Lisp сообщества) просьбам сообщников делюсь своим частным рассуждением о потенциале Lisp-систем в условиях delinking-а с более широкой аудиторией. Это мнение из категории «просто подумалось на досуге», оно не является абсолютно объективной истиной, но, вероятно, может представлять некоторый интерес.

Читать далее