Search code examples
macrosschemeguiler5rs

Is it possible to just print the string that was passed into the Scheme macro?


I am working on a language translator in guile scheme, and need to handle the basic case, where you're trying to convert a single word.

(define var 5)
(translate var)

This should return the string var and not the number 5.
How do I do this using R5RS Scheme macros (the define-syntax style)?

Edit:
I'm translating from Scheme to Coffeescript.


Solution

  • (define-syntax translate
      (syntax-rules ()
        [(_ v) 'v]))
    

    And if you want a string:

    (define-syntax translate
      (syntax-rules ()
        [(_ v) (symbol->string 'v)]))
    

    Hopefully Guile's compiler is smart enough to fold the resulting expression so it essentially becomes a constant string.