197 lines
3.4 KiB
ReStructuredText
197 lines
3.4 KiB
ReStructuredText
====
|
|
walk
|
|
====
|
|
|
|
.. versionadded:: 0.11.0
|
|
|
|
Functions
|
|
=========
|
|
|
|
.. _walk:
|
|
|
|
walk
|
|
-----
|
|
|
|
Usage: `(walk inner outer form)`
|
|
|
|
``walk`` traverses ``form``, an arbitrary data structure. Applies
|
|
``inner`` to each element of form, building up a data structure of the
|
|
same type. Applies ``outer`` to the result.
|
|
|
|
Example:
|
|
|
|
.. code-block:: hy
|
|
|
|
=> (import [hy.contrib.walk [walk]])
|
|
=> (setv a '(a b c d e f))
|
|
=> (walk ord identity a)
|
|
HyExpression([
|
|
97,
|
|
98,
|
|
99,
|
|
100,
|
|
101,
|
|
102])
|
|
=> (walk ord first a)
|
|
97
|
|
|
|
postwalk
|
|
---------
|
|
|
|
.. _postwalk:
|
|
|
|
Usage: `(postwalk f form)`
|
|
|
|
Performs depth-first, post-order traversal of ``form``. Calls ``f`` on
|
|
each sub-form, uses ``f`` 's return value in place of the original.
|
|
|
|
.. code-block:: hy
|
|
|
|
=> (import [hy.contrib.walk [postwalk]])
|
|
=> (def trail '([1 2 3] [4 [5 6 [7]]]))
|
|
=> (defn walking [x]
|
|
... (print "Walking:" x :sep "\n")
|
|
... x)
|
|
=> (postwalk walking trail)
|
|
Walking:
|
|
1
|
|
Walking:
|
|
2
|
|
Walking:
|
|
3
|
|
Walking:
|
|
HyExpression([
|
|
HyInteger(1),
|
|
HyInteger(2),
|
|
HyInteger(3)])
|
|
Walking:
|
|
4
|
|
Walking:
|
|
5
|
|
Walking:
|
|
6
|
|
Walking:
|
|
7
|
|
Walking:
|
|
HyExpression([
|
|
HyInteger(7)])
|
|
Walking:
|
|
HyExpression([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])
|
|
Walking:
|
|
HyExpression([
|
|
HyInteger(4),
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])])
|
|
Walking:
|
|
HyExpression([
|
|
HyList([
|
|
HyInteger(1),
|
|
HyInteger(2),
|
|
HyInteger(3)]),
|
|
HyList([
|
|
HyInteger(4),
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])])])
|
|
HyExpression([
|
|
HyList([
|
|
HyInteger(1),
|
|
HyInteger(2),
|
|
HyInteger(3)]),
|
|
HyList([
|
|
HyInteger(4),
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])])])
|
|
|
|
prewalk
|
|
--------
|
|
|
|
.. _prewalk:
|
|
|
|
Usage: `(prewalk f form)`
|
|
|
|
Performs depth-first, pre-order traversal of ``form``. Calls ``f`` on
|
|
each sub-form, uses ``f`` 's return value in place of the original.
|
|
|
|
.. code-block:: hy
|
|
|
|
=> (import [hy.contrib.walk [prewalk]])
|
|
=> (def trail '([1 2 3] [4 [5 6 [7]]]))
|
|
=> (defn walking [x]
|
|
... (print "Walking:" x :sep "\n")
|
|
... x)
|
|
=> (prewalk walking trail)
|
|
Walking:
|
|
HyExpression([
|
|
HyList([
|
|
HyInteger(1),
|
|
HyInteger(2),
|
|
HyInteger(3)]),
|
|
HyList([
|
|
HyInteger(4),
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])])])
|
|
Walking:
|
|
HyList([
|
|
HyInteger(1),
|
|
HyInteger(2),
|
|
HyInteger(3)])
|
|
Walking:
|
|
1
|
|
Walking:
|
|
2
|
|
Walking:
|
|
3
|
|
Walking:
|
|
HyList([
|
|
HyInteger(4),
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])])
|
|
Walking:
|
|
4
|
|
Walking:
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])
|
|
Walking:
|
|
5
|
|
Walking:
|
|
6
|
|
Walking:
|
|
HyList([
|
|
HyInteger(7)])
|
|
Walking:
|
|
7
|
|
HyExpression([
|
|
HyList([
|
|
HyInteger(1),
|
|
HyInteger(2),
|
|
HyInteger(3)]),
|
|
HyList([
|
|
HyInteger(4),
|
|
HyList([
|
|
HyInteger(5),
|
|
HyInteger(6),
|
|
HyList([
|
|
HyInteger(7)])])])])
|