Skip to content

Instantly share code, notes, and snippets.

@lexi-lambda
Last active April 12, 2018 15:40
Show Gist options
  • Save lexi-lambda/52060e6249e324e2d268ab3949e10c62 to your computer and use it in GitHub Desktop.
Save lexi-lambda/52060e6249e324e2d268ab3949e10c62 to your computer and use it in GitHub Desktop.
#lang racket
(require (for-syntax syntax/kerncase)
syntax/parse/define)
(define-simple-macro (m1 e:expr)
#:with x (local-expand #'e 'expression (kernel-form-identifier-list))
(quote-syntax x))
(define-simple-macro (m1.1 e:expr)
#:with x (local-expand #'e 'expression (list #'begin))
(quote-syntax x))
(define-simple-macro (m1.2 e:expr)
#:with x (local-expand #'e 'expression (list #'#%datum #'#%app #'#%top))
(quote-syntax x))
(define-simple-macro (m2 e:expr)
#:with x (local-expand #'e 'expression #f)
(quote-syntax x))
(define-simple-macro (m3 e:expr)
#:with x (local-expand #'e 'expression '())
(quote-syntax x))
(define-simple-macro (#%datum . _)
(quote datum))
(define-simple-macro (#%app . _)
(quote app))
(define-simple-macro (#%top . _)
(quote top))
(m1 #f) ; => 'datum
(m1.1 #f) ; => 'datum
(m1.2 #f) ; => #f
(m2 #f) ; => #f
(m3 #f) ; => 'datum
(#%plain-app newline)
(m1 (+)) ; => 'app
(m1.1 (+)) ; => 'app
(m1.2 (+)) ; => (+)
(m2 (+)) ; => (+)
(m3 (+)) ; => 'app
(#%plain-app newline)
(m1 unbound) ; => 'top
(m1.1 unbound) ; => 'top
(m1.2 unbound) ; => unbound
(m2 unbound) ; => unbound
(m3 unbound) ; => 'top
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment