Sequencing in The Racket Guide introduces begin and begin0.
The first form applies when
beginappears at the top level, at module level, or in an internal-definition position. In that case, the
beginform is equivalent to splicing the
forms into the enclosing context.
The second form applies for begin in an expression position. In that case, the exprs are evaluated in order, and the results are ignored for all but the last expr. The last expr is in tail position with respect to the begin form.
Examples:
Evaluates the first
expr, then evaluates the other
exprss in order, ignoring their results. The results of the first
exprare the results of the
begin0form; the first
expris in tail position only if no other
exprs are present.
Example:
expressions reference bindings at a phase level one greater than in the context of the begin-for-syntax form;
define, define-values, define-syntax, and define-syntaxes forms bind at a phase level one greater than in the context of the begin-for-syntax form;
in require and provide forms, the default phase level is greater, which is roughly like wrapping the content of the require form with for-syntax;
expression form expr: converted to (define-values-for-syntax () (begin expr (values))), which effectively evaluates the expression at expansion time and, in the case of a module context, preserves the expression for future visits of the module.
See also module for information about expansion order and partial expansion for begin-for-syntax within a module context. Evaluation of an expr within begin-for-syntax is parameterized to set current-namespace as in let-syntax.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4