Расширение макроса в схеме guile

В Guix есть слой из макросов, украшающий создание и манипулирование записями srfi-9

Код находится в guix/records.scm

Код большой и четко сформулированный

Я думал расширить эти макросы, чтобы увидеть их ввод и вывод, чтобы понять, что они делают

Дело в том, что даже стандартные записи vanilla srfi-9 являются макросами вокруг структур, в свою очередь

Таким образом, расширение макроса дает мне полностью расширенный код для создания и управления структурами.

Я бы предпочел увидеть результат одного прохода раскрытия макроса, чтобы увидеть, какой код srfi-9 создал макрос guix

В Clojure есть macroexpand а также macroexpand-1

macroexpand-1 делает один проход расширения макроса и macroexpand звонки macroexpand-1 несколько раз, пока не будет больше макров для расширения в обрабатываемых формах

Вы можете увидеть это здесь

Есть ли подобная опция в схеме Гиле?

Я пропускаю какой-либо трюк рабочего процесса, любой инструмент, любую библиотечную функцию или макрос для решения этой проблемы?

2 ответа

Хорошо, в файле NEWS есть этот отрывок

** Удалена функция: `macroexpand-1'

Неясно, как реализовать `macroexpand-1 'с синтаксическим регистром, хотя схема PLT действительно доказывает, что это возможно.

Я не знаю, в чем проблема между macroexpand-1 и syntax-case, и я не знаю, что Racket делает с этим

Но по крайней мере теперь я знаю, что macroexpand-1 был явно удален

Вот простая версия macroexpand1:

#lang racket

(define-syntax (expand1 stx)
  (syntax-case stx ()
    [(_expand1 form)
     (syntax-case #'form ()
       [(id . more)
        (identifier? #'id)
        (let ([transformer (syntax-local-value #'id)])          
          (with-syntax ([expansion (transformer #'form)])
            #''expansion))]
       [_
        #''form])]))

(expand1 (or 1 2 3))

Выход:

'(let ((or-part 1)) (if or-part or-part (or 2 3)))

Обратите внимание, что алгоритм расширения макросов Clojure более прост, чем тот, который используется в большинстве реализаций Scheme.

Для объяснения psyntax Портативный синтаксис-кейс смотрите в книге "Красивый код" для главы Дыбвига.

https://www.cs.indiana.edu/~dyb/pubs/bc-syntax-case.pdf

Другие вопросы по тегам