On this page:
identifier?
syntax-e
syntax->datum
datum->syntax
bound-identifier=?
8.12

5 Zuo with Hygienic Macros🔗ℹ

 #lang zuo/hygienic

The zuo/hygienic language provides the same set of bindings as zuo/base, but with hygienic macros. Its macro-expansion protocol uses a different representation of identifiers and binding scope, and different rules for quote-syntax and macros:

These differences particularly affect the functions that operate on syntax objects:

procedure

(identifier? v)  boolean?

  v : any/c

procedure

(syntax-e v)  symbol?

  v : identifier?

procedure

(syntax->datum v)  any/c

  v : any/c

procedure

(datum->syntax ctx v)  any/c

  ctx : identifier?
  v : any/c

procedure

(bound-identifier=? id1 id2)  boolean?

  id1 : identifier?
  id2 : identifier?
Unlike the zuo function, identifier? does not recognize a plain symbol as an identifier. The datum->syntax function converts symbols in v to syntax objects using the context of ctx.