+Definitions: define in The Racket Guide introduces definitions.
syntax
( define idexpr)
head = id| (headargs)args = arg...| arg....rest-idarg = arg-id| [arg-iddefault-expr]| keywordarg-id| keyword[arg-iddefault-expr]
In an internal-definition context, a define form introduces a local binding; see Internal Definitions. At the top level, the top-level binding for id is created after evaluating expr, if it does not exist already, and the top-level mapping of id (in the namespace linked with the compiled definition) is set to the binding at the same time.
In a context that allows liberal expansion of define , id is bound as syntax if expr is an immediate lambda form with keyword arguments or args include keyword arguments.
> x10
> (f10)11
> ((f10)30)40
> ((f10))30
syntax
(define-values (id...)expr)
In an internal-definition context (see Internal Definitions), a define-values form introduces local bindings. At the top level, the top-level binding for each id is created after evaluating expr, if it does not exist already, and the top-level mapping of each id (in the namespace linked with the compiled definition) is set to the binding at the same time.
> z3
If a define-values form for a function definition in a module body has a 'compiler-hint:cross-module-inline syntax property with a true value, then the Racket treats the property as a performance hint. See Function-Call Optimizations in The Racket Guide for more information, and see also begin-encourage-inline .
syntax
( define-syntax idexpr)
The second form is a shorthand the same as for define ; it expands to a definition of the first form where the expr is a lambda form.
In an internal-definition context (see Internal Definitions), a define-syntax form introduces a local binding.
> (foo1234)(1 2 3 4)
> (bar1234)(1 2 3 4)
syntax
(define-syntaxes (id...)expr)
When expr produces zero values for a top-level define-syntaxes (i.e., not in a module or internal-definition position), then the ids are effectively declared without binding; see Macro-Introduced Bindings.
In an internal-definition context (see Internal Definitions), a define-syntaxes form introduces local bindings.
transformer2transformer3)))> (foo1)1
> (foo2)2
> (foo3)3
syntax
( define-for-syntax idexpr)
Within a module, bindings introduced by define-for-syntax must appear before their uses or in the same define-for-syntax form (i.e., the define-for-syntax form must be expanded before the use is expanded). In particular, mutually recursive functions bound by define-for-syntax must be defined by the same define-for-syntax form.
> (make-two)helper is 2
2
;‘helper' is not bound in the runtime phase> helperhelper: undefined;
cannot reference an identifier before its definition
in module: top-level
(show-variablesa52bc))'(1 2 3)
syntax
( define-values-for-syntax (id...)expr)
> (bar)foo1 is 1 foo2 is 2
2
syntax
( define-require-syntax idproc-expr)
This form expands to define-syntax with a use of make-require-transformer (see require Transformers for more information).
The second form is a shorthand the same as for define-syntax ; it expands to a definition of the first form where the proc-expr is a lambda form.
procedure
stx:syntax?
Changed in version 6.90.0.29 of package base: Made equivalent to syntax-local-introduce .
syntax
( define-provide-syntax idproc-expr)
This form expands to define-syntax with a use of make-provide-transformer (see provide Transformers for more information).
The second form is a shorthand the same as for define-syntax ; it expands to a definition of the first form where the expr is a lambda form.
procedure
stx:syntax?
Changed in version 6.90.0.29 of package base: Made equivalent to syntax-local-introduce .