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

Lisp *

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

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

GIMP Script-Fu Первый Дан. Реализация Хеш-Таблицы

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

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

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

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

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

Читать далее

GIMP Script-Fu Первый Дан. Наивные графические преобразования

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

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

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

Читать далее

Задача о банкомате

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

Рассмотрим одну задачу, которая на leetcode маркирована как "medium", хотя на самом деле это невероятно сложная задача. Примечательна она тем, что допускает в разной степени оптимальные решения, самые упрощённые из которых действительно весьма просты, а самые оптимальные ещё не найдены современной наукой. В этой задаче ценно то, что на её примере можно изучать целый ряд техник программирования.

Читать далее

GIMP Script-Fu Первый Дан. Ускоряем Script-fu

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

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

Как я уже говорил тинисхема ленива, ленива настолько, что когда ей дают на вход определение функции, она тупо его считывает, и говорит: "А..., потом обработаю". И все макросы, которые находятся которые находятся в коде функций остаются не раскрытыми.

В этой статье мы рассмотрим вопрос, что с этим делать.

Читать далее

GIMP Script-Fu Первый Дан. Сортировка

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

Кто бы мог представить, что в современном мире ещё можно встретить языки программирования, в которых нет сортировки как штатной функции языка? Как себе можно вообще представить программирование без этой функции?! Ну что ж знакомьтесь, это язык tinyscheme и его GIMP порт под названием Script-fu.

Читать далее

GIMP Script-Fu Первый Дан. Точки, Контуры, Кисти и Градиенты

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

Создать абстракцию неких объектов на лиспе, это значит создать некий функциональный интерфейс обрабатывающий объекты данного типа. Нам необходима абстракция точки в двумерном пространстве, значит надо хранить две координаты. Для хранения двух значений в лиспе идеально подходит структура пары, создаваемая cons, на ней и будет базироваться первый вариант реализации точки.

Читать далее

GIMP Script-Fu Первый Дан. Погружение в программирование графики

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

Первым делом в окне script-fu я научился определять процедуры и запускать их:

(define (square x) (* x x))

(square 5)

А потом понеслось .....

Простые примеры работы с изображениями, слоями, выделениями в GIMP. Примеры рисования линий и окружностей.

Читать далее

GIMP Script-Fu Первый Дан. Расширения к Script-fu

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

Если сравнить расширяемое приложение с коробочкой, то плагины, это полезные вещи, которыми можно наполнить эту коробочку, придающие новое содержание нашему приложению. В этом ряду стоит и такая вещь как Script‑fu. Но что если я скажу, что Script‑fu так же может быть такой же «коробочкой» и может иметь расширения, давайте разбираться. Но сразу скажу, счастливы будут не все.

Читать далее

Почему Scheme?

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

Введение

Язык Scheme (произносится "ским"), которому в следующем году исполняется 50 лет, является языком программирования, занимающим необычное место среди прочих. Это язык, который гораздо больше изучают, чем потом на нём пишут. Скорее это язык для развития ума программиста, чем для написания коммерческого кода, хотя и примеры использования Scheme в коммерческой разработке тоже встречаются. На мой личный взгляд, Scheme идеален в качестве первого языка программирования в старшем школьном и институтском возрасте, а также идеально продолжает изучение Scratch в младших классах школы и Logo в средних классах.

Читать далее

GIMP Script-Fu Первый Дан. Макросы. Первое знакомство

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

Программисты: Разработчик, твой язык жалок, синтаксис беден и убог, как нам писать код?!?
Разработчик(языка lisp): Вот вам МАКРОС!!!

Разработчики языка Лисп(и Scheme тоже) были очень хитрые ребята, бессовестно воспользовавшись гомоиконичностью языка(т.е свойством подобия кода данным - знаменитая фраза в лиспе всё список, относится именно к этому свойству) они внедрили в язык макросы, средства синтаксической абстракции.
Таким образом в отличии от большинства ныне распространённых языков программирования(разработчики которых ночами не спят, пишут синтаксические анализаторы для всё новых и новых синтаксических форм своих языков), разработчики лиспов, обходятся минимальным набором синтаксических форм, что упрощает и ускоряет процесс интерпретации(да и компиляции тоже), а всё остальное богатство синтаксиса, передано на откуп макросам. Именно через макросы, являющиеся ортогональным средством абстрагирования, по отношению к функциональной абстракции, доступной во всех языках программирования, реализуется совершенствование и развития языков лисп. Это можно описать математической аналогией, когда в математике произошёл переход от рациональных чисел(в языке доступна только функциональная абстракция) к комплексным(в язык внедряется система синтаксической абстракции - макрос).

Читать далее

GIMP Script-Fu Первый Дан. Работа, Печать, Отладка

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

GIMP Script-Fu Первый Дан. Работа,Печать,Отладка.

Работа с консолью Script-fu и универсальная функция печати.

Читать далее

GIMP Script-Fu Первый Дан. Первое приветствие

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

Наша цель нарисовать приветствие на изображении в GIMP. Но для того что бы вывести что то на изображение, это изображение у нас должно быть. Мы можем создать его в ручную. Просто средствами GIMP, или же создать его прямо из плагина Script-fu.

Научим плагин создавать изображения, определив функцию создания изображений. Что надо знать, так это то что изображение состоит из слоев - layer, в нашем новом изображении будет изначально только один слой. Изображение будет создано и заполнено ТЕКУЩИМ цветом фона, установленного в Гимп, но мы могли бы вполне себе и задать цвет фона создаваемого изображения.

Читать далее

GIMP Script-Fu Первый Дан. Шаг первый

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

Здравствуй Читатель! Если ты хочешь научиться программировать расширения для GIMP с помощью Script-fu тебе сюда. Я планирую опубликовать серию статей по данной теме. И эта статья только первый шаг в увлекательный мир лайф-кодинга. Что это значит? Расширение GIMP Script-fu представляет собой обёртку над интерпретатором языка scheme, который позволяет не только загружать и интерпретировать скрипты пользователя, но и работать с ними в интерактивном режиме, давая команды интерпретатору в режиме REPL, когда интерпретатор читает код(Read), оценивает(или ещё говорят вычисляет) то что прочитал(Eval), печатает результат(Print) и повторят всё это заново(Loop), короче REPL.

Предисловие

Однажды изучая книгу, Структура и интерпретация компьютерных программ(SICP), я наткнулся на задание по созданию языка функциональной геометрии придуманного Питером Хендерсоном funcgeo2.pdf. И я решил повторить эту реализация в качестве задания, закрепляющего тему процедурной композиции. Обычно задания я делал используя реализацию языка scheme - racket. Отличный язык для обучения основам программирования. Более простой курс этого обучения, пригодный для школьников описан в книге HtDP — "Как разрабатывать программы", перевод которой недавно вышел в печатном виде в России, есть также моя неофициальная попытка перевода, в виде html страниц: htdp-rus . Более продвинутый курс изучения компьютерных наук на языке Scheme описан в уже упомянутой книге SICP, обычно изучаемой уже студентами ВУЗов. Но в языке racket уже реализованы элементы этого языка манипулирования изображениями, поэтому я решил обратить своё внимание на язык script-fu в GIMP, про который мне на тот момент было практически ничего не известно, кроме того что он также является одной из разновидностью реализаций scheme. Результаты попытки реализации этого задания из SCIP и представлены в настоящей работе.

Читать далее

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

Почему Racket? Почему Lisp?

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

Великолепный Racket и практичный Typography стали возможны благодаря издательской системе под названием Pollen. Я создал Pollen с помощью языка программирования Racket. Racket является потомком Scheme, который, в свою очередь, является потомком Lisp

Читать далее

Геймдев на Lisp. Часть 2: подземелья и интерфейсы

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

В первой части мы познакомились с архитектурным паттерном Entity-Component-System, часто используемым в разработке игр, и металингвистической парадигмой программирования, заключающейся в построении и использовании собственных языков, наиболее полно и точно описывающих предметную область создаваемой программы. На сей раз мы используем эти приёмы для создания небольшой, но полноценной игры на Common Lisp в жанре dungeon crawler (рус. надмозг. "подземное ползание") с пользовательским интерфейсом и рассмотрим на её примере системный дизайн реального игрового приложения с использованием ECS.

TL;DR: готовую к запуску демонстрацию (бинарники под все распространённые ОС) и её исходный код можно найти на github.

Читать далее

Сравним ruby, lisp и python

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

На примере простых алгоритмов (вычисление расстояния между точками, сумма членов геометрической прогрессии, формирование массива простых чисел по алгоритму Эратосфена, числа Фибоначчи) сравниваются три языка программирования - Lisp, Python и Ruby. Сравнение проходит по следующим параметрам: компактность и читаемость кода, скорость работы.

Читать далее

Код как данные: пишем Python на Python

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров18K
Идея о том, что язык программирования может реализовать сам себя, удивительна. Она вызывает сильное любопытство: «Как это вообще может выглядеть?» С момента своего появления в начале 60-х это мог делать Lisp.

В начале 60-х Джон Маккарти придумал серию примечательных идей, хорошо сочетающихся друг с другом и актуальных даже спустя десятки лет. Сначала он сформулировал их в статье о Lisp, а чуть позже — в руководстве по Lisp 1.5.


Джон Маккарти

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

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

Проектная, конструкторская или технологическая документация. Основные системы стандартов

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

Правовая основа стандартизации в России заложена в ст. 71 Конституции Российской Федерации — «В ведении Российской Федерации находятся: … р) метрологическая служба, стандарты, эталоны, метрическая система и исчисление времени; геодезия и картография; наименования географических объектов; метеорологическая служба; официальный статистический и бухгалтерский учет; …»

Дальнейшее развитие законодательства представлено двумя основными федеральными законами, прямо или косвенно лежащими в основе любого стандарта:

— Федеральный закон «О стандартизации в Российской Федерации» от 29.06.2015 N 162-ФЗ;
— Федеральный закон «О техническом регулировании» от 27.12.2002 N 184-ФЗ.

Читать далее

Дайте мне точку опоры…

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

...и я переверну землю.

Заметка о том, как перевернуть мир в отдельно взятом SVG-файле (на Common Lisp).

Читать далее

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

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

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


Читать далее