Как стать автором
Обновить
0

Lisp *

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

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

Ветераны IT: Как найти программистов прошлых поколений языков

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

При словосочетании «Ветераны IT» вы наверное представили себе сразу же старичков в пиджаках с нашивками из микросхем и шумным стационаром. Но это не совсем то, что мы подразумеваем под Ветеранами IT.


Читать далее
Всего голосов 14: ↑9 и ↓5+4
Комментарии24

Новости

Книга «Основы компиляции: инкрементный подход»

Время на прочтение14 мин
Количество просмотров4.9K
image Привет, Хаброжители!

Компиляторы традиционно считаются одной из самых трудных для понимания и изучения тем. Обычно в книгах каждая глава посвящена отдельному проходу компилятора. Но такая структура не позволяет раскрыть, как языковые средства влияют на решения, принимаемые при проектировании компилятора.

Вместо этого в «Основах компиляции» выбран инкрементный подход: компилятор совершенствуется последовательно, и читатель может написать весь код самостоятельно. Книга помогает создать собственный компилятор для небольшого, но достаточно мощного языка программирования, постепенно, шаг за шагом вводя все более сложные языковые средства.

Джереми Сик объясняет важнейшие концепции, алгоритмы и структуры данных, лежащие в основе современных компиляторов, и закладывает основу для изучения более сложных тем. Это краткое, но доступное руководство уже давно используют студенты и профессионалы.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии6

Язык Janet для смертных. Часть 2 — Компиляция и создание образов

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

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

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

Читать далее
Всего голосов 2: ↑2 и ↓0+2
Комментарии7

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

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

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

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

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии98

Истории

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

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

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

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

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии5

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

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

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

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

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

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии19

LISP в космосе

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


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


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


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


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

Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии23

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

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

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

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

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

Читать далее
Всего голосов 10: ↑8 и ↓2+6
Комментарии8

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

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

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

image

Мы сегодня хотим остановиться на одном из значимых эпизодов в жизни Маккарти — его многолетней дружбе с Андреем Петровичем Ершовым. Их переписка и совместная работа во времена, когда американец и советский гражданин находились по разные стороны баррикад — яркий пример того, что для настоящей науки и её последователей нет никаких границ.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+29
Комментарии0

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

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

В этой статье мы разберём использование в Emacs различных команд для упорядочивания строк, абзацев и страниц. В руководствах к Emacs и Elisp эти команды описаны достаточно подробно, так что мы просто познакомимся с практическими примерами их применения.
Читать дальше →
Всего голосов 54: ↑53 и ↓1+52
Комментарии2

История T

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

Олин Шиверс


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

Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии1

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

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

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



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

Читать дальше →
Всего голосов 16: ↑14 и ↓2+12
Комментарии6

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

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

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

Читать далее
Всего голосов 6: ↑3 и ↓30
Комментарии46

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

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

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

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

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии7

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

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

Аннотация


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

Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии22

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

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


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

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии20

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

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

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

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

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

Подробнее о символических вычислениях
Всего голосов 23: ↑23 и ↓0+23
Комментарии23

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

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

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

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

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

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

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

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

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

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

Читать далее
Всего голосов 10: ↑9 и ↓1+8
Комментарии3

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

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

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

Казалось бы, что тут может пойти не так?
Всего голосов 4: ↑4 и ↓0+4
Комментарии10
1
23 ...