kurvivor (kurvivor) wrote,
kurvivor
kurvivor

Category:

Генерация кода на питоне при помощи 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 и его последующем "дизассемблировании" в код на питоне.

Tags: lisp, python
Subscribe

  • Генерация кода на питоне с помощью hy 3

    При использовании hy для кодогенерации (в отличие от просто работы на нём), всплывают некоторые аспекты, которые при отправке кода на выполнение…

  • Генерация кода на питоне с помощью hy 2

    При генерации питоновского кода, в отличие, например, от написания макросов, для нас является важным, какие названия носят новые символы, т.е. в…

  • Генерация кода на питоне с помощью hy

    Не так давно у меня возникла задача сгенерировать некоторое количество кода на питоне. Решил для этого воспользоваться диалектом лиспа для питона,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments