Merge pull request #1834 from Kodiologist/let-ns
Document gotcha with unintentional recursion in `let`
This commit is contained in:
commit
50b34dd727
@ -240,7 +240,8 @@ The ``let`` macro takes two parameters: a list defining *variables*
|
|||||||
and the *body* which gets executed. *variables* is a vector of
|
and the *body* which gets executed. *variables* is a vector of
|
||||||
variable and value pairs.
|
variable and value pairs.
|
||||||
|
|
||||||
``let`` executes the variable assignments one-by-one, in the order written.
|
Like the ``let*`` of many other Lisps, ``let`` executes the variable
|
||||||
|
assignments one-by-one, in the order written::
|
||||||
|
|
||||||
.. code-block:: hy
|
.. code-block:: hy
|
||||||
|
|
||||||
@ -249,4 +250,8 @@ variable and value pairs.
|
|||||||
... (print x y))
|
... (print x y))
|
||||||
5 6
|
5 6
|
||||||
|
|
||||||
|
Unlike them, however, each ``(let …)`` form uses only one
|
||||||
|
namespace for all its assignments. Thus, ``(let [x 1 x (fn [] x)]
|
||||||
|
(x))`` returns a function object, not 1 as you might expect.
|
||||||
|
|
||||||
It is an error to use a let-bound name in a ``global`` or ``nonlocal`` form.
|
It is an error to use a let-bound name in a ``global`` or ``nonlocal`` form.
|
||||||
|
Loading…
Reference in New Issue
Block a user