Commit c04ac8a3 authored by Philipp Stephani's avatar Philipp Stephani

Document that variable binding order is unspecified

* doc/lispref/variables.texi (Local Variables):
* cl.texi (Modify Macros): Document that binding order in 'let' and
'cl-letf' is unspecified.
parent 272554a6
......@@ -221,6 +221,18 @@ Here is an example of this: @code{z} is bound to the old value of
@result{} (1 2)
@end group
@end example
On the other hand, the order of @emph{bindings} is unspecified: in the
following example, either 1 or 2 might be printed.
(let ((x 1)
(x 2))
(print x))
@end example
Therefore, avoid binding a variable more than once in a single
@code{let} form.
@end defspec
@defspec let* (bindings@dots{}) forms@dots{}
......@@ -1179,6 +1179,11 @@ behavior. (@code{point} and @code{point-marker} are equivalent
as @code{setf} places; each will accept either an integer or a
marker as the stored value.)
Like in the case of @code{let}, the @var{value} forms are evaluated in
the order they appear, but the order of bindings is unspecified.
Therefore, avoid binding the same @var{place} more than once in a
single @code{cl-letf} form.
Since generalized variables look like lists, @code{let}'s shorthand
of using @samp{foo} for @samp{(foo nil)} as a @var{binding} would
be ambiguous in @code{cl-letf} and is not allowed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment