1

I got this answer https://stackoverflow.com/a/70318991 about writing a simple macro that records the time at macro expansion time, and then always returns that time.

#lang racket

(begin-for-syntax
  (define the-time (current-seconds)))

(define-syntax (macro-expansion-seconds stx)
  (datum->syntax stx the-time))

(macro-expansion-seconds)
(macro-expansion-seconds)
(macro-expansion-seconds)

It works great, but now is there an easy way to see an expanded version of (macro-expansion-seconds) without evaluating it? (for debugging more complicated ones)

4

1 回答 1

3

You can use

(expand #'(macro-expansion-seconds))

in the DrRacket repl.

It will show you the graphical representation of a syntax object - remember to click the little arrow! In Mythical Macros I have written a little syntax objects.

https://soegaard.github.io/mythical-macros/

An alternative is to use the "Macro Stepper". Click the button in upper right corner of DrRacket: the icon is a combination of consists of a # and a play symbol.

于 2021-12-12T12:47:21.667 回答