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

Lisp *

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

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

Лямбда, Лисп и Ложбан — в поисках утраченного Вавилона, или мой проект конструирования симметричного языка

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

В этом монументальном тексте я постараюсь рассказать вам о трёх непревзойдённых шедеврах XX века - математическом языке лямбда-исчисления, языке программирования LISP и спроектированном языке человеческого общения под названием "Ложбан", а также о лежащих в их основе общих принципах и идеях. Кроме того, в конце этого поста я представлю вам свой собственный проект по конструированию языка человеческого общения, в основу которого я положил фундаментальные лингвистические симметрии. Мой проект развивает идеи Ложбана и пытается исправить его недостатки, в мессианской надежде отыскать давно утерянный допотопный язык.

Читать далее

Новости

Вызовы функций, стек, куча и продолжения. Часть 2

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

В первой части статьи мы рассмотрели общую семантику применения функции в различных языках программирования и реализацию императивного вызова функции в машинном коде в стековом и бесстековом вариантах. Теперь мы рассмотрим теорию и практику реализации императивного вызова функции в модели продолжений (continuations): что такое продолжения, зачем нужны явные и неявные продолжения, как при помощи продолжений реализовать различные используемые в языках программирования управляющие конструкции.

Читать далее

Вызовы функций, стек, куча и продолжения. Часть 1

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

Для многих людей, занимающихся программированием, вызов функции воспринимается практически как синоним передачи управления с сохранением адреса возврата и выделением фрейма памяти в стеке. Это однако, не всегда верно и в практическом, и в теоретическом отношении. О семантике и прагматике вызова функций мы и поговорим в этой статье.

Читать далее

Упрощать сложно. История одного провала

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

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

В общем, проблема оказалась отнюдь не мала

GIMP Script-Fu Первый Дан. Язык функциональной геометрии. Итоги

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

Библиотека функций к Script-fu
Язык функциональной геометрии

В предыдущей части мы рассмотрели базовые операции языка функциональной геометрии, так сказать кирпичики языка. Сегодня мы ознакомимся с более сложными функциями, т.е покажем что из этих кирпичиков можно построить. Базовым изображением для работы, будет "рыба" Питера Хендерсона.

Читать далее

GIMP Script-Fu Первый Дан. Язык функциональной геометрии. Рисунки(картинки) и базовые операции

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

Библиотека функций к Script-fu
Язык функциональной геометрии

Базовым элементом языка функциональной геометрии являются рисунки (picture), это функции которые отображают своё содержимое в предоставляемые им в виде аргументов изображение и рамку. Конечно в базовой документации об изображениях нет речи, но здесь я адаптировал этот язык в реалиям GIMP и включил изображение на котором будет отображаться картинка как часть интерфейса вызова функции. Хотя можно было и выкинуть их из него, создав какой нибудь глобальный контекст, хранящий текущее изображение с которым работает язык, к которому бы обращались все функции, это дело вкуса.

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

Читать далее

Gambit Scheme: интегрируемся с Python

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

Статья продолжает рассмотрение неочевидных возможностей Gambit Scheme, начатое в предыдущих статьях.

На этот раз расскажем о том, как использовать в программах на Gambit Scheme код на языке Python, в том числе многочисленные библиотеки, разработанные для Python.

Читать далее

GIMP Script-Fu Первый Дан. Выходим за Рамки

Время на прочтение20 мин
Количество просмотров326

Библиотека функций к Script-fu

Создав функции отображения фигур(fig, figs) и изображений(img) в заданные рамки(rect), мы практически подошли к созданию языка функциональной геометрии. Но базовые возможности языка созданного на лекциях SICP, немного отличаются от языка Питера Хендерсона. Дело в том что на лекциях SICP в целях облегчения усвоения материала, лектор упростил возможности отображения изображений в рамку. На лекциях осуществлялось точное отображение, из полных габаритов рисунка в полные габариты рамки. Но язык Питера Хендерсона предусматривает расширенное отображение исходного изображения в предоставленную рамку, т.е. в саму ограничивающую рамку может отображаться только специально выделяемая часть изображения, остальная же часть изображения может размещаться ВНЕ пределов рамки.

Читать далее

Gambit Scheme: переопределяем формат вывода u8vector

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

Продолжим рассмотрение неочевидных поучительных возможностей программирования на Gambit Scheme, начатое в предыдущих статьях.

На этот раз займёмся пристойной печатью значений типа u8vector, то есть массивов байтов.

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

Читать далее

GIMP Script-Fu Первый Дан. Фигуры. Объектный подход

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

Библиотека функций к Script-fu

Реализовав простейшую объектную систему в Scheme полезно было бы продемонстрировать преимущество от её использования. Чем в этой статье мы и займёмся. Демонстрацию проведём на примере абстракции Фигуры, ведь именно при реализации этой абстракции у меня и возникло сожаление об отсутствии ОО средств в Scheme.

Читать далее

Семь способов выхода из рекурсии

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

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

Читать далее

GIMP Script-Fu Первый Дан. Объектно-ориентрованное программирование в Scheme. Простая реализация

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

На протяжении всей работы по реализации языка функциональной геометрии Эшера Хендерсона мы немного развивали tinyscheme, различными языковыми конструкциями и ни разу у меня не возникало необходимости использовать Объектно-Ориентированный подход, но вот реализовав абстракцию Фигуры, я понял, что языку tinyscheme очень не хватает объектов и полиморфных функций, потому что данная конструкция не позволяет развивать абстракцию фигуры, расширять различные их варианты. Нет расширять и изменять конечно можно, но придётся постоянно её дописывать и изменять.

С этим нужно было что-то делать. И в этой статье речь пойдёт о первой попытке решить проблему отсутствия нормального ООП в tinyscheme.

Читать далее

GIMP Script-Fu Первый Дан. Фигуры

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

Библиотека функций к Script-fu

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

Читать далее

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

Gambit Scheme: проверяем, определён ли атом

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

Одной из особенностей языка Scheme, в отличие от многих других динамических языков и «взрослых» диалектов Лиспа, является лексическая область видимости идентификаторов (как в классических компилируемых языках). С одной стороны, это удобно для статического анализа кода программы и особенно удобно для компиляции. С другой стороны, это затрудняет непосредственные операции с лексическим окружением.

Одной из самых проблематичных операций, реализацию которой затрудняет идеология Scheme, является стандартная для ряда диалектов форма is-bound?, предназначенная для проверки, определён ли её аргумент, то есть занесён ли он в системный ассоциативный список атомов и, как следствие, имеет ли он вообще какое-либо значение. Рассмотрим, как мы можем реализовать данную форму в Gambit Scheme.

Читать далее

Gambit Scheme: переопределяем скобки

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

Рассмотрим недавно вошедшую в Gambit Scheme возможность по переопределению семантики скобок.

Gambit Scheme – используемый автором диалект Scheme, имеющий очень быстрый интерпретатор и компилятор с рядом полезных расширений, которые могут быть построены из исходного кода без внешних зависимостей, а также в полной мере поддерживают интернациональные символы UTF-8.

Читать далее

Весь мир в файле .org: Как использовать Emacs для заметок

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

В этой статье мы рассмотрим, как организовать систему для ведения заметок с помощью Emacs и Org-mode. Мы обсудим базовую настройку Emacs для работы с заметками, а также предложим структуру, которая позволит эффективно управлять информацией и проектами. Эта система будет гибкой и легко адаптируемой под ваши нужды, позволяя вам создать персонализированное рабочее пространство.

Читать далее

GIMP Script-Fu Первый Дан. Рамки

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

Библиотека функций к Script-fu

Для отрисовки некоторого изображения в произвольном месте холста изображения это место надо как то определить. Определим рамку в которой мы будем отображать наши контуры или изображения как три вектора, вектор начала координат, вектор обозначающий горизонтальное направление(ось X), вектор обозначающий вертикальное направление(ось Y).

Читать далее

GIMP Script-Fu Первый Дан. Берём Кисти и рисуем Точки и Звёздочки

Время на прочтение12 мин
Количество просмотров652

Да да, опять точки. Я ранее уже рассказывал как построить абстракцию точки. А теперь мы займёмся рисованием точек, выбранными кистями, рассмотрим различие в управлении кистями версий 2.10 и 2.6, ознакомимся с понятием "динамика кисти" и как с ней работать, а так же займёмся рисованием звёзд без градиента и с помощью "псевдо градиента". Поехали.

Библиотека функций к Script-fu

Читать далее

GIMP Script-Fu Первый Дан. Удобная передача параметров в функцию

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

Библиотека функций к Script-fu

Script-fu(Тинисхема) передает параметры в функцию в виде списка и позволяет передавать значения в обязательные именованные параметры, функции с одним параметром принимающим неограниченное количество значений , или функции смешанного типа, с обязательными именованными параметрами и параметром остатком в виде списка.

Но иногда... мы хотим чего-то БОЛЬШЕГО!!!

Читать далее

GIMP Script-Fu Первый Дан. Линейные преобразования на плоскости

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

Библиотека функций к Script-fu

Итак, настоящая киллер функция по отображению изображений это gimp-item-transform-matrix. Именно на её основе мы и будем строить все отображения изображений в нашем проекте.

Для использования функции GIMP gimp-item-transform-matrix, осуществляющей линейное преобразования заданного отображаемого объекта, нам нужна структура в которой мы могли бы хранить матрицу преобразования. На основе этой структуры, мы построим абстракцию линейного двумерного преобразования на плоскости. Я посмотрел все эти преобразования и увидел, что матрица имеет всего 6 значимых полей, остальные два ноль и одно единица, поэтому наша структура будет хранить всего 6 полей.

Читать далее
1
23 ...