Previous: , Up: expander utils   [Index]


15.4.11 Expanding forms

The following bindings are exported by the library (vicare expander).

Function: expand-form-to-core-language sexp env

Interface to the internal expression expander, it is the expansion engine used by R6RS’s eval function.

sexp must be a symbolic expression representing a Scheme form; env must be an evaluation environment.

Return two values: the result of the expansion as symbolic expression in the core language; a list of libraries that must be invoked before evaluating the returned expression.

Example:

(import (vicare)
  (prefix (vicare expander) xp::))

(receive (code libs)
     (xp::expand-form-to-core-language
        '(define (doit x)
           (if (null? x)
               #f
             (doit (cdr x))))
        (environment '(vicare)))
  code)
⇒ (set! loc.doit
     (annotated-case-lambda doit
       ((lex.x)
        (if (annotated-call (null? x)
              (primitive null?) lex.x)
            '#f
        (annotated-call (doit (cdr x))
          loc.doit
          (annotated-call (cdr x) (primitive cdr) lex.x))))))