racket/collects/scribblings/guide/void-and-undef.scrbl
Matthew Flatt 8d61bb4c70 reference-manual work
svn: r6495
2007-06-06 01:13:51 +00:00

44 lines
1.4 KiB
Racket

#reader(lib "docreader.ss" "scribble")
@require[(lib "manual.ss" "scribble")]
@require[(lib "eval.ss" "scribble")]
@require["guide-utils.ss"]
@title[#:tag "void+undefined"]{Void and Undefined}
Some procedures or expression forms have no need for a result
value. For example, the @scheme[display] procedure is called only for
the side-effect of writing output. In such cases the reslt value is
normally a special constant that prints as @|void-const|. When the
result of an expression is simply @|void-const|, the REPL does not
print anything.
The @scheme[void] procedure takes any number of arguments and returns
@|void-const|. (That is, the identifier @schemeidfont{void} is bound
to a procedure that returns @|void-const|, instead of being bound
directly to @|void-const|.)
@examples[
(void)
(void 1 2 3)
(list (void))
]
A constant that prints as @undefined-const is used as the result of a
reference to a local binding when the binding is not yet
initialized. Such early references are not possible for bindings that
corerspond to procedure arguments, @scheme[let] bindings, or
@scheme[let*] bindings; early reference requires a recursive binding
context, such as @scheme[letrec] or local @scheme[define]s in a
procedure body. Also, early references to top-level and module-level
bindings raise an exception, instead of producing
@|undefined-const|. For these reasons, @undefined-const rarely
appears.
@def+int[
(define (strange)
(define x x)
x)
(strange)
]