Гномы в Героях

Сего дня случилось долгожданное - я наконец-то выиграл последнюю миссию "Молотов судьбы". Это заняло у меня много времени, пытался с перерывами больше двух недель. Мои начальные попытки зарашить короля Толгара приводили к тому, что он с лёгкостью размазывал меня по стенам своей крепости.

Collapse )

Крузенштерн

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

Collapse )

Воннегут 2

Про "колыбельку".

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

  • Не удивительно, что ребята растут психами. Ведь такая "кошкина колыбель" - просто переплетённые иксы на чьих-то руках. А малыши смотрят, смотрят, смотрят…
  • Ну и что?
  • И никакой, к чёрту, кошки, никакой, к чёрту, колыбельки нет!

О культурном голодании

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

Collapse )

Генерация кода на питоне при помощи hy 0

1 Что такое Hy

Hy - диалект Лиспа, который встроен в питон.

Благодаря тому, что Hy трансформирует свой Лиспоподобный код в Абстрактное Синтаксическое Дерево (AST) питона, с помощью Hy весь прекрасный мир питона - на кончиках пальцев и в форме Лиспа.

2 О синтаксисе Hy, очень кратко

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

  1. Отступ не играет роли. Вместо этого - уровни вложенности в выражения из круглых скобочек.
  2. Во всех вызовах функций название функции попадает в скобки со списком аргументов на первое место; запятые в списке аргументов не используются.
  3. Все операторы записываются так, как будто они - функции.
  4. Двоеточия не используются.
  5. Литералы для строк и словарей работают как и раньше; строки записываются в двойных кавычках, кортежи выглядят как вызов функции ",".

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

3 Терминологические замечания

Следует отдельно оговорить используемую терминологию. Основные английские термины на английском - quoting, unquoting, quaziquoting, splicing, macro expansion. В переводе книги Practical Common Lisp на русский язык для них используются слова "цитирование", "расцитирование", "квазицитирование" - и для последнего из них - "раскрытие макросов". Я не считаю этот вариант перевода удобным.

В данном материале будут использованы в качестве переводов "скрытие" для quoting, "раскрытие" для unquoting, "квазискрытие" для quaziquoting, "структурное раскрытие" для splicing, "расширение макроса" для macro expansion.

В приведённых далее примерах кода, можно увидеть синтаксис этих операций:

'
скрытие; применяется к последующей форме Hy; вместо её выполнения она будет обработанакак как данные.
`
квазискрытие; более сложная форма скрытия, позволяющая строить более сложные синтаксические структуры.
~
раскрытие; так как , занята в питоне для конструктора кортежей, используемый символ отличается от традиционной для Лиспа запятой. Употребляется в квазискрытой форме и помещает в неё результат выполнения следующей за ней формы.
~@
структурное раскрытие; работает аналогично предыдущей операции со следующим различием: результат оценки формы должен быть списком, и его элементы помещаются в объемлющую квазискрытую форму.

Выполнение обозначает вызов функции если форма - список, и доступ к значению символа в противном случае; литералы при выполнении остаются сами собой.

Способ, которым производится генерация кода на питоне, состоит в получении эквивалентного AST и его последующем "дизассемблировании" в код на питоне.