working on documenting builtins
This commit is contained in:
parent
c6410b7050
commit
151ac69ce8
@ -41,10 +41,30 @@ behavior that's slightly unexpected in some situations.
|
|||||||
->
|
->
|
||||||
--
|
--
|
||||||
|
|
||||||
|
`->` or `threading macro` is used to avoid nesting of expressions. The threading
|
||||||
|
macro inserts each expression into the next expression’s first argument place.
|
||||||
|
The following code demonstrates this:
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
=> (defn output [a b] (print a b))
|
||||||
|
=> (-> (+ 5 5) (output 5))
|
||||||
|
10 5
|
||||||
|
|
||||||
|
|
||||||
->>
|
->>
|
||||||
---
|
---
|
||||||
|
|
||||||
|
`->>` or `threading tail macro` is similar to `threading macro` but instead of
|
||||||
|
inserting each expression into the next expression’s first argument place it
|
||||||
|
appends it as the last argument. The following code demonstrates this:
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
=> (defn output [a b] (print a b))
|
||||||
|
=> (->> (+ 5 5) (output 5))
|
||||||
|
5 10
|
||||||
|
|
||||||
|
|
||||||
and
|
and
|
||||||
---
|
---
|
||||||
@ -301,10 +321,29 @@ eval-when-compile
|
|||||||
first / car
|
first / car
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
`first` and `car` are macros for accessing the first element of a collection:
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
=> (first (range 10))
|
||||||
|
0
|
||||||
|
|
||||||
|
|
||||||
for
|
for
|
||||||
---
|
---
|
||||||
|
|
||||||
|
`for` macro is used to build nested `foreach` loops. The macro takes two
|
||||||
|
parameters, first being a vector specifying collections to iterate over and
|
||||||
|
variables to bind. The second parameter is a statement which is executed during
|
||||||
|
each loop:
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
(for [x iter y iter] stmt)
|
||||||
|
|
||||||
|
(foreach [x iter]
|
||||||
|
(foreach [y iter] stmt))
|
||||||
|
|
||||||
|
|
||||||
foreach
|
foreach
|
||||||
-------
|
-------
|
||||||
@ -601,6 +640,14 @@ The following example will import macros from `namespace-1` and `namespace-2`:
|
|||||||
rest / cdr
|
rest / cdr
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
`rest` and `cdr` are used to access every element in collection, except the
|
||||||
|
first one:
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
=> (rest (range 10))
|
||||||
|
[1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
|
||||||
|
|
||||||
slice
|
slice
|
||||||
-----
|
-----
|
||||||
@ -684,10 +731,29 @@ if an error was raised or not, the `finally` block is executed as last.
|
|||||||
unless
|
unless
|
||||||
------
|
------
|
||||||
|
|
||||||
|
`unless` macro is a shorthand for writing a if-statement that checks if the
|
||||||
|
given conditional is False. The following shows how the macro expands into code.
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
(unless conditional statement)
|
||||||
|
|
||||||
|
(if conditional
|
||||||
|
None
|
||||||
|
(do statement))
|
||||||
|
|
||||||
when
|
when
|
||||||
----
|
----
|
||||||
|
|
||||||
|
`when` is similar to `unless`, except it tests when the given conditional is
|
||||||
|
True. It is not possible to have an `else` block in `when` macro. The following
|
||||||
|
shows how the macro is expanded into code.
|
||||||
|
|
||||||
|
.. code-block:: clj
|
||||||
|
|
||||||
|
(when conditional statement)
|
||||||
|
|
||||||
|
(if conditional (do statement))
|
||||||
|
|
||||||
while
|
while
|
||||||
-----
|
-----
|
||||||
|
Loading…
x
Reference in New Issue
Block a user