2014-12-06 21:28:28 +01:00
|
|
|
=======
|
2013-07-08 04:36:26 +02:00
|
|
|
Hy Core
|
2014-12-06 21:28:28 +01:00
|
|
|
=======
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
Core Functions
|
2014-12-06 21:28:28 +01:00
|
|
|
==============
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-08-22 11:51:12 +02:00
|
|
|
.. _butlast-fn:
|
|
|
|
|
|
|
|
butlast
|
|
|
|
-------
|
|
|
|
|
|
|
|
Usage: ``(butlast coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator of all but the last item in *coll*.
|
2014-08-22 11:51:12 +02:00
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (list (butlast (range 10)))
|
|
|
|
[0, 1, 2, 3, 4, 5, 6, 7, 8]
|
|
|
|
|
|
|
|
=> (list (butlast [1]))
|
|
|
|
[]
|
|
|
|
|
|
|
|
=> (list (butlast []))
|
|
|
|
[]
|
|
|
|
|
|
|
|
=> (import itertools)
|
|
|
|
=> (list (take 5 (butlast (itertools.count 10))))
|
|
|
|
[10, 11, 12, 13, 14]
|
|
|
|
|
|
|
|
|
2014-01-12 11:22:14 +01:00
|
|
|
.. _is-coll-fn:
|
|
|
|
|
|
|
|
coll?
|
2014-01-16 13:08:18 +01:00
|
|
|
-----
|
2014-01-12 11:22:14 +01:00
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2014-01-12 11:22:14 +01:00
|
|
|
|
|
|
|
Usage: ``(coll? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is iterable and not a string.
|
2014-01-12 11:22:14 +01:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2014-01-12 11:22:14 +01:00
|
|
|
|
|
|
|
=> (coll? [1 2 3 4])
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (coll? {"a" 1 "b" 2})
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (coll? "abc")
|
|
|
|
False
|
|
|
|
|
|
|
|
|
2013-05-16 18:59:20 +02:00
|
|
|
cons
|
|
|
|
----
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2013-05-16 18:59:20 +02:00
|
|
|
|
|
|
|
Usage: ``(cons a b)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns a fresh :ref:`cons cell <hycons>` with car *a* and cdr *b*.
|
2013-05-16 18:59:20 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-05-16 18:59:20 +02:00
|
|
|
|
|
|
|
=> (setv a (cons 'hd 'tl))
|
|
|
|
|
|
|
|
=> (= 'hd (car a))
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (= 'tl (cdr a))
|
|
|
|
True
|
|
|
|
|
|
|
|
|
|
|
|
cons?
|
|
|
|
-----
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2013-05-16 18:59:20 +02:00
|
|
|
|
|
|
|
Usage: ``(cons? foo)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Checks whether *foo* is a :ref:`cons cell <hycons>`.
|
2013-05-16 18:59:20 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-05-16 18:59:20 +02:00
|
|
|
|
|
|
|
=> (setv a (cons 'hd 'tl))
|
|
|
|
|
|
|
|
=> (cons? a)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (cons? nil)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (cons? [1 2 3])
|
|
|
|
False
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _dec-fn:
|
|
|
|
|
|
|
|
dec
|
|
|
|
---
|
|
|
|
|
|
|
|
Usage: ``(dec x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns one less than *x*. Equivalent to ``(- x 1)``. Raises ``TypeError``
|
|
|
|
if ``(not (numeric? x))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (dec 3)
|
|
|
|
2
|
|
|
|
|
|
|
|
=> (dec 0)
|
|
|
|
-1
|
|
|
|
|
|
|
|
=> (dec 12.3)
|
|
|
|
11.3
|
|
|
|
|
|
|
|
|
2014-01-05 14:42:19 +01:00
|
|
|
.. _disassemble-fn:
|
|
|
|
|
|
|
|
disassemble
|
|
|
|
-----------
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2014-01-05 15:25:41 +01:00
|
|
|
|
2014-01-05 14:42:19 +01:00
|
|
|
Usage: ``(disassemble tree &optional [codegen false])``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Dump the Python AST for given Hy *tree* to standard output. If *codegen*
|
|
|
|
is ``True``, the function prints Python code instead.
|
2014-01-05 14:42:19 +01:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2014-01-05 14:42:19 +01:00
|
|
|
|
|
|
|
=> (disassemble '(print "Hello World!"))
|
|
|
|
Module(
|
|
|
|
body=[
|
|
|
|
Expr(value=Call(func=Name(id='print'), args=[Str(s='Hello World!')], keywords=[], starargs=None, kwargs=None))])
|
|
|
|
|
2014-01-05 15:25:41 +01:00
|
|
|
=> (disassemble '(print "Hello World!") true)
|
2014-01-05 14:42:19 +01:00
|
|
|
print('Hello World!')
|
|
|
|
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _emtpy?-fn:
|
|
|
|
|
|
|
|
empty?
|
|
|
|
------
|
|
|
|
|
|
|
|
Usage: ``(empty? coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *coll* is empty. Equivalent to ``(= 0 (len coll))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (empty? [])
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (empty? "")
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (empty? (, 1 2))
|
|
|
|
False
|
|
|
|
|
|
|
|
|
2014-02-11 09:42:56 +01:00
|
|
|
.. _every?-fn:
|
|
|
|
|
|
|
|
every?
|
|
|
|
------
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2014-02-11 09:42:56 +01:00
|
|
|
|
|
|
|
Usage: ``(every? pred coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if ``(pred x)`` is logical true for every *x* in *coll*,
|
|
|
|
otherwise ``False``. Return ``True`` if *coll* is empty.
|
2014-02-11 09:42:56 +01:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2014-02-11 09:42:56 +01:00
|
|
|
|
|
|
|
=> (every? even? [2 4 6])
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (every? even? [1 3 5])
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (every? even? [2 4 5])
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (every? even? [])
|
|
|
|
True
|
|
|
|
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _float?-fn:
|
|
|
|
|
|
|
|
float?
|
|
|
|
-------
|
|
|
|
|
|
|
|
Usage: ``(float? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is a float.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (float? 3.2)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (float? -2)
|
|
|
|
False
|
|
|
|
|
|
|
|
|
2015-06-26 23:10:22 +02:00
|
|
|
.. _fraction-fn:
|
|
|
|
|
|
|
|
fraction
|
|
|
|
--------
|
|
|
|
|
|
|
|
Returns a Python object of type ``fractions.Fraction``.
|
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (fraction 1 2)
|
|
|
|
Fraction(1, 2)
|
|
|
|
|
|
|
|
Note that Hy has a built-in fraction literal that does the same thing:
|
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> 1/2
|
|
|
|
Fraction(1, 2)
|
|
|
|
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _even?-fn:
|
|
|
|
|
|
|
|
even?
|
|
|
|
-----
|
|
|
|
|
|
|
|
Usage: ``(even? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is even. Raises ``TypeError`` if
|
|
|
|
``(not (numeric? x))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (even? 2)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (even? 13)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (even? 0)
|
|
|
|
True
|
|
|
|
|
|
|
|
|
2014-01-21 20:19:49 +01:00
|
|
|
.. _identity-fn:
|
|
|
|
|
|
|
|
identity
|
|
|
|
--------
|
|
|
|
|
|
|
|
Usage: ``(identity x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns the argument supplied to the function.
|
2014-01-21 20:19:49 +01:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2014-01-21 20:19:49 +01:00
|
|
|
|
|
|
|
=> (identity 4)
|
|
|
|
4
|
|
|
|
|
|
|
|
=> (list (map identity [1 2 3 4]))
|
|
|
|
[1 2 3 4]
|
|
|
|
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _inc-fn:
|
|
|
|
|
|
|
|
inc
|
|
|
|
---
|
|
|
|
|
|
|
|
Usage: ``(inc x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns one more than *x*. Equivalent to ``(+ x 1)``. Raises ``TypeError``
|
|
|
|
if ``(not (numeric? x))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (inc 3)
|
|
|
|
4
|
|
|
|
|
|
|
|
=> (inc 0)
|
|
|
|
1
|
|
|
|
|
|
|
|
=> (inc 12.3)
|
|
|
|
13.3
|
|
|
|
|
|
|
|
|
|
|
|
.. _instance?-fn:
|
|
|
|
|
|
|
|
instance?
|
|
|
|
---------
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Usage: ``(instance? class x)``
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is an instance of *class*.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (instance? float 1.0)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (instance? int 7)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (instance? str (str "foo"))
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (defclass TestClass [object])
|
|
|
|
=> (setv inst (TestClass))
|
|
|
|
=> (instance? TestClass inst)
|
|
|
|
True
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _integer?-fn:
|
|
|
|
|
|
|
|
integer?
|
|
|
|
--------
|
|
|
|
|
|
|
|
Usage: ``(integer? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns `True` if *x* is an integer. For Python 2, this is
|
2013-07-29 18:40:48 +02:00
|
|
|
either ``int`` or ``long``. For Python 3, this is ``int``.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (integer? 3)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (integer? -2.4)
|
|
|
|
False
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-08-17 04:53:57 +02:00
|
|
|
.. _interleave-fn:
|
|
|
|
|
|
|
|
interleave
|
|
|
|
----------
|
|
|
|
|
|
|
|
.. versionadded:: 0.10.1
|
|
|
|
|
|
|
|
Usage: ``(interleave seq1 seq2 ...)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterable of the first item in each of the sequences,
|
2014-12-06 21:28:28 +01:00
|
|
|
then the second, etc.
|
2014-08-17 04:53:57 +02:00
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (list (interleave (range 5) (range 100 105)))
|
|
|
|
[0, 100, 1, 101, 2, 102, 3, 103, 4, 104]
|
|
|
|
|
|
|
|
=> (list (interleave (range 1000000) "abc"))
|
|
|
|
[0, 'a', 1, 'b', 2, 'c']
|
|
|
|
|
|
|
|
|
|
|
|
.. _interpose-fn:
|
|
|
|
|
|
|
|
interpose
|
|
|
|
---------
|
|
|
|
|
|
|
|
.. versionadded:: 0.10.1
|
|
|
|
|
|
|
|
Usage: ``(interpose item seq)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterable of the elements of the sequence separated by the item.
|
2014-08-17 04:53:57 +02:00
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (list (interpose "!" "abcd"))
|
|
|
|
['a', '!', 'b', '!', 'c', '!', 'd']
|
|
|
|
|
|
|
|
=> (list (interpose -1 (range 5)))
|
|
|
|
[0, -1, 1, -1, 2, -1, 3, -1, 4]
|
|
|
|
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _iterable?-fn:
|
|
|
|
|
|
|
|
iterable?
|
|
|
|
---------
|
|
|
|
|
|
|
|
Usage: ``(iterable? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is iterable. Iterable objects return a new iterator
|
2013-07-08 04:36:26 +02:00
|
|
|
when ``(iter x)`` is called. Contrast with :ref:`iterator?-fn`.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> ;; works for strings
|
|
|
|
=> (iterable? (str "abcde"))
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; works for lists
|
|
|
|
=> (iterable? [1 2 3 4 5])
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; works for tuples
|
|
|
|
=> (iterable? (, 1 2 3))
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; works for dicts
|
|
|
|
=> (iterable? {:a 1 :b 2 :c 3})
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; works for iterators/generators
|
|
|
|
=> (iterable? (repeat 3))
|
|
|
|
True
|
|
|
|
|
|
|
|
|
|
|
|
.. _iterator?-fn:
|
|
|
|
|
|
|
|
iterator?
|
|
|
|
---------
|
|
|
|
|
|
|
|
Usage: ``(iterator? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is an iterator. Iterators are objects that return
|
|
|
|
themselves as an iterator when ``(iter x)`` is called. Contrast with
|
|
|
|
:ref:`iterable?-fn`.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> ;; doesn't work for a list
|
|
|
|
=> (iterator? [1 2 3 4 5])
|
|
|
|
False
|
|
|
|
|
|
|
|
=> ;; but we can get an iter from the list
|
|
|
|
=> (iterator? (iter [1 2 3 4 5]))
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; doesn't work for dict
|
|
|
|
=> (iterator? {:a 1 :b 2 :c 3})
|
|
|
|
False
|
|
|
|
|
|
|
|
=> ;; create an iterator from the dict
|
|
|
|
=> (iterator? (iter {:a 1 :b 2 :c 3}))
|
|
|
|
True
|
|
|
|
|
2014-12-06 21:32:11 +01:00
|
|
|
|
|
|
|
.. _list*-fn:
|
|
|
|
|
2013-05-16 18:59:20 +02:00
|
|
|
list*
|
|
|
|
-----
|
|
|
|
|
|
|
|
Usage: ``(list* head &rest tail)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Generates a chain of nested cons cells (a dotted list) containing the
|
2013-05-16 18:59:20 +02:00
|
|
|
arguments. If the argument list only has one element, return it.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-05-16 18:59:20 +02:00
|
|
|
|
|
|
|
=> (list* 1 2 3 4)
|
|
|
|
(1 2 3 . 4)
|
|
|
|
|
|
|
|
=> (list* 1 2 3 [4])
|
|
|
|
[1, 2, 3, 4]
|
|
|
|
|
|
|
|
=> (list* 1)
|
|
|
|
1
|
|
|
|
|
|
|
|
=> (cons? (list* 1 2 3 4))
|
|
|
|
True
|
|
|
|
|
2014-01-02 11:49:40 +01:00
|
|
|
.. _macroexpand-fn:
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2013-10-11 13:06:22 +02:00
|
|
|
macroexpand
|
|
|
|
-----------
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2014-01-02 11:49:40 +01:00
|
|
|
|
2013-10-11 13:06:22 +02:00
|
|
|
Usage: ``(macroexpand form)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns the full macro expansion of *form*.
|
2013-10-11 13:06:22 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-10-11 13:06:22 +02:00
|
|
|
|
|
|
|
=> (macroexpand '(-> (a b) (x y)))
|
|
|
|
(u'x' (u'a' u'b') u'y')
|
|
|
|
|
2013-10-11 14:50:10 +02:00
|
|
|
=> (macroexpand '(-> (a b) (-> (c d) (e f))))
|
|
|
|
(u'e' (u'c' (u'a' u'b') u'd') u'f')
|
|
|
|
|
2014-01-02 11:49:40 +01:00
|
|
|
.. _macroexpand-1-fn:
|
|
|
|
|
2013-10-11 14:50:10 +02:00
|
|
|
macroexpand-1
|
|
|
|
-------------
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2014-01-02 11:49:40 +01:00
|
|
|
|
2013-10-11 14:50:10 +02:00
|
|
|
Usage: ``(macroexpand-1 form)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns the single step macro expansion of *form*.
|
2013-10-11 14:50:10 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-10-11 14:50:10 +02:00
|
|
|
|
|
|
|
=> (macroexpand-1 '(-> (a b) (-> (c d) (e f))))
|
|
|
|
(u'_>' (u'a' u'b') (u'c' u'd') (u'e' u'f'))
|
|
|
|
|
2014-01-14 08:30:36 +01:00
|
|
|
|
|
|
|
.. _merge-with-fn:
|
|
|
|
|
|
|
|
merge-with
|
|
|
|
----------
|
|
|
|
|
2014-10-09 01:58:42 +02:00
|
|
|
.. versionadded:: 0.10.1
|
2014-01-14 08:30:36 +01:00
|
|
|
|
2014-12-06 21:32:11 +01:00
|
|
|
Usage: ``(merge-with f &rest maps)``
|
2014-01-14 08:30:36 +01:00
|
|
|
|
2014-10-09 01:58:42 +02:00
|
|
|
Returns a map that consist of the rest of the maps joined onto first.
|
|
|
|
If a key occurs in more than one map, the mapping(s) from the latter
|
|
|
|
(left-to-right) will be combined with the mapping in the result by
|
|
|
|
calling ``(f val-in-result val-in-latter)``.
|
2014-01-14 08:30:36 +01:00
|
|
|
|
2014-12-07 07:35:32 +01:00
|
|
|
.. code-block:: hy
|
2014-01-14 08:30:36 +01:00
|
|
|
|
|
|
|
=> (merge-with (fn [x y] (+ x y)) {"a" 10 "b" 20} {"a" 1 "c" 30})
|
|
|
|
{u'a': 11L, u'c': 30L, u'b': 20L}
|
|
|
|
|
|
|
|
|
2014-01-02 11:49:40 +01:00
|
|
|
.. _neg?-fn:
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
neg?
|
|
|
|
----
|
|
|
|
|
|
|
|
Usage: ``(neg? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is less than zero. Raises ``TypeError`` if
|
|
|
|
``(not (numeric? x))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (neg? -2)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (neg? 3)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (neg? 0)
|
|
|
|
False
|
|
|
|
|
2014-01-01 00:14:05 +01:00
|
|
|
|
|
|
|
.. _nil?-fn:
|
|
|
|
|
|
|
|
nil?
|
2014-12-06 21:28:28 +01:00
|
|
|
----
|
2014-01-01 00:14:05 +01:00
|
|
|
|
|
|
|
Usage: ``(nil? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is ``nil`` / ``None``.
|
2014-01-01 00:14:05 +01:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2014-01-01 00:14:05 +01:00
|
|
|
|
|
|
|
=> (nil? nil)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (nil? None)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (nil? 0)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (setf x nil)
|
|
|
|
=> (nil? x)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; list.append always returns None
|
|
|
|
=> (nil? (.append [1 2 3] 4))
|
|
|
|
True
|
|
|
|
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _none?-fn:
|
|
|
|
|
|
|
|
none?
|
|
|
|
-----
|
|
|
|
|
|
|
|
Usage: ``(none? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is ``None``.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (none? None)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (none? 0)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (setf x None)
|
|
|
|
=> (none? x)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> ;; list.append always returns None
|
|
|
|
=> (none? (.append [1 2 3] 4))
|
|
|
|
True
|
|
|
|
|
|
|
|
|
|
|
|
.. _nth-fn:
|
|
|
|
|
|
|
|
nth
|
|
|
|
---
|
|
|
|
|
2014-09-03 10:53:28 +02:00
|
|
|
Usage: ``(nth coll n &optional [default nil])``
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns the *n*-th item in a collection, counting from 0. Return the
|
2014-09-03 10:53:28 +02:00
|
|
|
default value, ``nil``, if out of bounds (unless specified otherwise).
|
2014-12-07 07:05:52 +01:00
|
|
|
Raises ``ValueError`` if *n* is negative.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (nth [1 2 4 7] 1)
|
|
|
|
2
|
|
|
|
|
|
|
|
=> (nth [1 2 4 7] 3)
|
|
|
|
7
|
|
|
|
|
2014-08-23 13:35:31 +02:00
|
|
|
=> (nil? (nth [1 2 4 7] 5))
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (nth [1 2 4 7] 5 "default")
|
|
|
|
'default'
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (nth (take 3 (drop 2 [1 2 3 4 5 6])) 2))
|
|
|
|
5
|
2014-01-02 11:49:40 +01:00
|
|
|
|
2014-08-23 13:35:31 +02:00
|
|
|
=> (nth [1 2 4 7] -1)
|
|
|
|
Traceback (most recent call last):
|
|
|
|
...
|
|
|
|
ValueError: Indices for islice() must be None or an integer: 0 <= x <= sys.maxsize.
|
|
|
|
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _numeric?-fn:
|
|
|
|
|
|
|
|
numeric?
|
2014-12-06 21:32:11 +01:00
|
|
|
--------
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
Usage: ``(numeric? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is a numeric, as defined in Python's
|
|
|
|
``numbers.Number`` class.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (numeric? -2)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (numeric? 3.2)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (numeric? "foo")
|
|
|
|
False
|
|
|
|
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _odd?-fn:
|
|
|
|
|
|
|
|
odd?
|
|
|
|
----
|
|
|
|
|
|
|
|
Usage: ``(odd? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is odd. Raises ``TypeError`` if
|
|
|
|
``(not (numeric? x))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (odd? 13)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (odd? 2)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (odd? 0)
|
|
|
|
False
|
|
|
|
|
|
|
|
|
|
|
|
.. _pos?-fn:
|
|
|
|
|
|
|
|
pos?
|
|
|
|
----
|
|
|
|
|
|
|
|
Usage: ``(pos? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is greater than zero. Raises ``TypeError``
|
|
|
|
if ``(not (numeric? x))``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (pos? 3)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (pos? -2)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (pos? 0)
|
|
|
|
False
|
|
|
|
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _second-fn:
|
|
|
|
|
|
|
|
second
|
2014-12-06 21:32:11 +01:00
|
|
|
------
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
Usage: ``(second coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns the second member of *coll*. Equivalent to ``(get coll 1)``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (second [0 1 2])
|
|
|
|
1
|
|
|
|
|
|
|
|
|
2014-02-11 09:42:56 +01:00
|
|
|
.. _some-fn:
|
|
|
|
|
|
|
|
some
|
|
|
|
----
|
|
|
|
|
2014-04-10 20:21:32 +02:00
|
|
|
.. versionadded:: 0.10.0
|
2014-02-11 09:42:56 +01:00
|
|
|
|
|
|
|
Usage: ``(some pred coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns the first logically-true value of ``(pred x)`` for any ``x`` in
|
|
|
|
*coll*, otherwise ``nil``. Return ``nil`` if *coll* is empty.
|
2014-02-11 09:42:56 +01:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2014-02-11 09:42:56 +01:00
|
|
|
|
|
|
|
=> (some even? [2 4 6])
|
|
|
|
True
|
|
|
|
|
2014-09-04 11:29:38 +02:00
|
|
|
=> (nil? (some even? [1 3 5]))
|
|
|
|
True
|
2014-02-11 09:42:56 +01:00
|
|
|
|
2014-09-04 11:29:38 +02:00
|
|
|
=> (nil? (some identity [0 "" []]))
|
2014-02-11 09:42:56 +01:00
|
|
|
True
|
|
|
|
|
2014-09-04 11:29:38 +02:00
|
|
|
=> (some identity [0 "non-empty-string" []])
|
|
|
|
'non-empty-string'
|
|
|
|
|
|
|
|
=> (nil? (some even? []))
|
|
|
|
True
|
2014-02-11 09:42:56 +01:00
|
|
|
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _string?-fn:
|
|
|
|
|
|
|
|
string?
|
|
|
|
-------
|
|
|
|
|
|
|
|
Usage: ``(string? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is a string.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (string? "foo")
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (string? -2)
|
|
|
|
False
|
|
|
|
|
2015-01-29 18:21:26 +01:00
|
|
|
.. _symbol?-fn:
|
|
|
|
|
|
|
|
symbol?
|
|
|
|
-------
|
|
|
|
|
|
|
|
Usage: ``(symbol? x)``
|
|
|
|
|
|
|
|
Returns ``True`` if *x* is a symbol.
|
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (symbol? 'foo)
|
|
|
|
True
|
|
|
|
|
|
|
|
=> (symbol? '[a b c])
|
|
|
|
False
|
|
|
|
|
2013-09-04 02:41:11 +02:00
|
|
|
.. _zero?-fn:
|
|
|
|
|
|
|
|
zero?
|
2014-01-01 00:14:05 +01:00
|
|
|
-----
|
2013-09-04 02:41:11 +02:00
|
|
|
|
|
|
|
Usage: ``(zero? x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns ``True`` if *x* is zero.
|
2013-09-04 02:41:11 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-09-04 02:41:11 +02:00
|
|
|
|
|
|
|
=> (zero? 3)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (zero? -2)
|
|
|
|
False
|
|
|
|
|
|
|
|
=> (zero? 0)
|
|
|
|
True
|
|
|
|
|
2013-09-02 11:28:21 +02:00
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
Sequence Functions
|
2014-12-06 21:32:11 +01:00
|
|
|
==================
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
Sequence functions can either create or operate on a potentially
|
|
|
|
infinite sequence without requiring the sequence be fully realized in
|
|
|
|
a list or similar container. They do this by returning a Python
|
|
|
|
iterator.
|
|
|
|
|
|
|
|
We can use the canonical infinite Fibonacci number generator
|
|
|
|
as an example of how to use some of these functions.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
(defn fib []
|
2013-11-26 19:31:10 +01:00
|
|
|
(setv a 0)
|
|
|
|
(setv b 1)
|
2013-07-08 04:36:26 +02:00
|
|
|
(while true
|
|
|
|
(yield a)
|
2013-11-26 19:31:10 +01:00
|
|
|
(setv (, a b) (, b (+ a b)))))
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
Note the ``(while true ...)`` loop. If we run this in the REPL,
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (fib)
|
|
|
|
<generator object fib at 0x101e642d0>
|
|
|
|
|
|
|
|
|
|
|
|
Calling the function only returns an iterator, but does no
|
|
|
|
work until we consume it. Trying something like this is not recommend as
|
|
|
|
the infinite loop will run until it consumes all available RAM, or
|
|
|
|
in this case until I killed it.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (fib))
|
|
|
|
[1] 91474 killed hy
|
|
|
|
|
|
|
|
|
|
|
|
To get the first 10 Fibonacci numbers, use :ref:`take-fn`. Note that
|
|
|
|
:ref:`take-fn` also returns a generator, so I create a list from it.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (take 10 (fib)))
|
|
|
|
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
|
|
|
|
|
|
|
|
|
|
|
|
To get the Fibonacci number at index 9, (starting from 0):
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (nth (fib) 9)
|
2014-01-02 11:49:40 +01:00
|
|
|
34
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
.. _cycle-fn:
|
|
|
|
|
|
|
|
cycle
|
2014-12-06 21:32:11 +01:00
|
|
|
-----
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
Usage: ``(cycle coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an infinite iterator of the members of coll.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
.. code-block:: clj
|
|
|
|
|
|
|
|
=> (list (take 7 (cycle [1 2 3])))
|
|
|
|
[1, 2, 3, 1, 2, 3, 1]
|
|
|
|
|
|
|
|
=> (list (take 2 (cycle [1 2 3])))
|
2014-01-02 11:49:40 +01:00
|
|
|
[1, 2]
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
.. _distinct-fn:
|
|
|
|
|
|
|
|
distinct
|
|
|
|
--------
|
|
|
|
|
|
|
|
Usage: ``(distinct coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator containing only the unique members in *coll*.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (distinct [ 1 2 3 4 3 5 2 ]))
|
|
|
|
[1, 2, 3, 4, 5]
|
|
|
|
|
|
|
|
=> (list (distinct []))
|
|
|
|
[]
|
|
|
|
|
|
|
|
=> (list (distinct (iter [ 1 2 3 4 3 5 2 ])))
|
|
|
|
[1, 2, 3, 4, 5]
|
|
|
|
|
|
|
|
|
|
|
|
.. _drop-fn:
|
|
|
|
|
|
|
|
drop
|
|
|
|
----
|
|
|
|
|
|
|
|
Usage: ``(drop n coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator, skipping the first *n* members of *coll*.
|
|
|
|
Raises ``ValueError`` if *n* is negative.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (drop 2 [1 2 3 4 5]))
|
|
|
|
[3, 4, 5]
|
|
|
|
|
|
|
|
=> (list (drop 4 [1 2 3 4 5]))
|
|
|
|
[5]
|
|
|
|
|
|
|
|
=> (list (drop 0 [1 2 3 4 5]))
|
|
|
|
[1, 2, 3, 4, 5]
|
|
|
|
|
|
|
|
=> (list (drop 6 [1 2 3 4 5]))
|
|
|
|
[]
|
|
|
|
|
2014-08-22 11:09:59 +02:00
|
|
|
|
|
|
|
.. _drop-last-fn:
|
|
|
|
|
|
|
|
drop-last
|
|
|
|
---------
|
|
|
|
|
|
|
|
Usage: ``(drop-last n coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator of all but the last *n* items in *coll*. Raises
|
|
|
|
``ValueError`` if *n* is negative.
|
2014-08-22 11:09:59 +02:00
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (list (drop-last 5 (range 10 20)))
|
|
|
|
[10, 11, 12, 13, 14]
|
|
|
|
|
|
|
|
=> (list (drop-last 0 (range 5)))
|
|
|
|
[0, 1, 2, 3, 4]
|
|
|
|
|
|
|
|
=> (list (drop-last 100 (range 100)))
|
|
|
|
[]
|
|
|
|
|
|
|
|
=> (import itertools)
|
|
|
|
=> (list (take 5 (drop-last 100 (itertools.count 10))))
|
|
|
|
[10, 11, 12, 13, 14]
|
|
|
|
|
|
|
|
|
2013-07-29 18:40:48 +02:00
|
|
|
.. _drop-while-fn:
|
|
|
|
|
|
|
|
drop-while
|
|
|
|
-----------
|
|
|
|
|
|
|
|
Usage: ``(drop-while pred coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator, skipping members of *coll* until *pred* is ``False``.
|
2013-07-29 18:40:48 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-29 18:40:48 +02:00
|
|
|
|
|
|
|
=> (list (drop-while even? [2 4 7 8 9]))
|
|
|
|
[7, 8, 9]
|
|
|
|
|
|
|
|
=> (list (drop-while numeric? [1 2 3 None "a"])))
|
|
|
|
[None, u'a']
|
|
|
|
|
|
|
|
=> (list (drop-while pos? [2 4 7 8 9]))
|
|
|
|
[]
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
.. _filter-fn:
|
|
|
|
|
|
|
|
filter
|
|
|
|
------
|
|
|
|
|
|
|
|
Usage: ``(filter pred coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator for all items in *coll* that pass the predicate *pred*.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
See also :ref:`remove-fn`.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (filter pos? [1 2 3 -4 5 -7]))
|
|
|
|
[1, 2, 3, 5]
|
|
|
|
|
|
|
|
=> (list (filter even? [1 2 3 -4 5 -7]))
|
|
|
|
[2, -4]
|
|
|
|
|
2013-12-30 23:09:17 +01:00
|
|
|
.. _flatten-fn:
|
|
|
|
|
|
|
|
flatten
|
|
|
|
-------
|
|
|
|
|
|
|
|
.. versionadded:: 0.9.12
|
|
|
|
|
|
|
|
Usage: ``(flatten coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns a single list of all the items in *coll*, by flattening all
|
2013-12-30 23:09:17 +01:00
|
|
|
contained lists and/or tuples.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-12-30 23:09:17 +01:00
|
|
|
|
|
|
|
=> (flatten [1 2 [3 4] 5])
|
|
|
|
[1, 2, 3, 4, 5]
|
|
|
|
|
|
|
|
=> (flatten ["foo" (, 1 2) [1 [2 3] 4] "bar"])
|
|
|
|
['foo', 1, 2, 1, 2, 3, 4, 'bar']
|
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
.. _iterate-fn:
|
|
|
|
|
|
|
|
iterate
|
|
|
|
-------
|
|
|
|
|
|
|
|
Usage: ``(iterate fn x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator of *x*, *fn(x)*, *fn(fn(x))*, etc.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (take 5 (iterate inc 5)))
|
|
|
|
[5, 6, 7, 8, 9]
|
|
|
|
|
|
|
|
=> (list (take 5 (iterate (fn [x] (* x x)) 5)))
|
|
|
|
[5, 25, 625, 390625, 152587890625]
|
|
|
|
|
|
|
|
|
2014-07-24 20:44:55 +02:00
|
|
|
.. _read-fn:
|
|
|
|
|
|
|
|
read
|
|
|
|
----
|
|
|
|
|
2014-09-02 22:26:47 +02:00
|
|
|
Usage: ``(read &optional [from-file eof])``
|
2014-07-24 20:44:55 +02:00
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Reads the next Hy expression from *from-file* (defaulting to ``sys.stdin``), and
|
|
|
|
can take a single byte as EOF (defaults to an empty string). Raises ``EOFError``
|
|
|
|
if *from-file* ends before a complete expression can be parsed.
|
2014-07-24 20:44:55 +02:00
|
|
|
|
|
|
|
.. code-block:: hy
|
2014-08-19 10:55:47 +02:00
|
|
|
|
2014-07-24 20:44:55 +02:00
|
|
|
=> (read)
|
|
|
|
(+ 2 2)
|
|
|
|
('+' 2 2)
|
|
|
|
=> (eval (read))
|
2014-08-19 10:55:47 +02:00
|
|
|
(+ 2 2)
|
2014-07-24 20:44:55 +02:00
|
|
|
4
|
2014-08-19 10:55:47 +02:00
|
|
|
|
2014-07-24 20:44:55 +02:00
|
|
|
=> (import io)
|
|
|
|
=> (def buffer (io.StringIO "(+ 2 2)\n(- 2 1)"))
|
2014-08-14 18:18:05 +02:00
|
|
|
=> (eval (apply read [] {"from_file" buffer}))
|
2014-07-24 20:44:55 +02:00
|
|
|
4
|
2014-08-14 18:18:05 +02:00
|
|
|
=> (eval (apply read [] {"from_file" buffer}))
|
2014-07-24 20:44:55 +02:00
|
|
|
1
|
|
|
|
|
2014-08-19 11:02:07 +02:00
|
|
|
=> ; assuming "example.hy" contains:
|
|
|
|
=> ; (print "hello")
|
|
|
|
=> ; (print "hyfriends!")
|
|
|
|
=> (with [[f (open "example.hy")]]
|
|
|
|
... (try
|
|
|
|
... (while true
|
|
|
|
... (let [[exp (read f)]]
|
|
|
|
... (do
|
|
|
|
... (print "OHY" exp)
|
|
|
|
... (eval exp))))
|
|
|
|
... (catch [e EOFError]
|
|
|
|
... (print "EOF!"))))
|
|
|
|
OHY ('print' 'hello')
|
|
|
|
hello
|
|
|
|
OHY ('print' 'hyfriends!')
|
|
|
|
hyfriends!
|
|
|
|
EOF!
|
|
|
|
|
2015-07-28 16:55:16 +02:00
|
|
|
read-str
|
|
|
|
--------
|
|
|
|
|
2015-07-28 17:37:50 +02:00
|
|
|
Usage: ``(read-str "string")``
|
2015-07-28 16:55:16 +02:00
|
|
|
|
|
|
|
This is essentially a wrapper around `read` which reads expressions from a
|
|
|
|
string:
|
|
|
|
|
|
|
|
.. code-block:: hy
|
|
|
|
|
|
|
|
=> (read-str "(print 1)")
|
|
|
|
(u'print' 1L)
|
|
|
|
=> (eval (read-str "(print 1)"))
|
|
|
|
1
|
|
|
|
=>
|
2014-07-24 20:44:55 +02:00
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
.. _remove-fn:
|
|
|
|
|
|
|
|
remove
|
|
|
|
------
|
|
|
|
|
|
|
|
Usage: ``(remove pred coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator from *coll* with elements that pass the
|
|
|
|
predicate, *pred*, removed.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
See also :ref:`filter-fn`.
|
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (remove odd? [1 2 3 4 5 6 7]))
|
|
|
|
[2, 4, 6]
|
|
|
|
|
|
|
|
=> (list (remove pos? [1 2 3 4 5 6 7]))
|
|
|
|
[]
|
|
|
|
|
|
|
|
=> (list (remove neg? [1 2 3 4 5 6 7]))
|
|
|
|
[1, 2, 3, 4, 5, 6, 7]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. _repeat-fn:
|
|
|
|
|
|
|
|
repeat
|
|
|
|
------
|
|
|
|
|
|
|
|
Usage: ``(repeat x)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator (infinite) of ``x``.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (take 6 (repeat "s")))
|
|
|
|
[u's', u's', u's', u's', u's', u's']
|
|
|
|
|
|
|
|
|
|
|
|
.. _repeatedly-fn:
|
|
|
|
|
|
|
|
repeatedly
|
|
|
|
----------
|
|
|
|
|
|
|
|
Usage: ``(repeatedly fn)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator by calling *fn* repeatedly.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (import [random [randint]])
|
|
|
|
|
|
|
|
=> (list (take 5 (repeatedly (fn [] (randint 0 10)))))
|
|
|
|
[6, 2, 0, 6, 7]
|
|
|
|
|
|
|
|
|
|
|
|
.. _take-fn:
|
|
|
|
|
|
|
|
take
|
|
|
|
----
|
|
|
|
|
|
|
|
Usage: ``(take n coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator containing the first *n* members of *coll*.
|
|
|
|
Raises ``ValueError`` if *n* is negative.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (take 3 [1 2 3 4 5]))
|
|
|
|
[1, 2, 3]
|
|
|
|
|
|
|
|
=> (list (take 4 (repeat "s")))
|
|
|
|
[u's', u's', u's', u's']
|
2014-01-02 11:49:40 +01:00
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
=> (list (take 0 (repeat "s")))
|
|
|
|
[]
|
|
|
|
|
|
|
|
.. _take-nth-fn:
|
|
|
|
|
|
|
|
take-nth
|
|
|
|
--------
|
|
|
|
|
|
|
|
Usage: ``(take-nth n coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator containing every *n*-th member of *coll*.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (take-nth 2 [1 2 3 4 5 6 7]))
|
|
|
|
[1, 3, 5, 7]
|
|
|
|
|
|
|
|
=> (list (take-nth 3 [1 2 3 4 5 6 7]))
|
|
|
|
[1, 4, 7]
|
|
|
|
|
|
|
|
=> (list (take-nth 4 [1 2 3 4 5 6 7]))
|
|
|
|
[1, 5]
|
|
|
|
|
|
|
|
=> (list (take-nth 10 [1 2 3 4 5 6 7]))
|
|
|
|
[1]
|
2014-01-02 11:49:40 +01:00
|
|
|
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
.. _take-while-fn:
|
|
|
|
|
|
|
|
take-while
|
|
|
|
----------
|
|
|
|
|
|
|
|
Usage: ``(take-while pred coll)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Returns an iterator from *coll* as long as *pred* returns ``True``.
|
2013-07-08 04:36:26 +02:00
|
|
|
|
2014-03-14 14:01:47 +01:00
|
|
|
.. code-block:: hy
|
2013-07-08 04:36:26 +02:00
|
|
|
|
|
|
|
=> (list (take-while pos? [ 1 2 3 -4 5]))
|
|
|
|
[1, 2, 3]
|
|
|
|
|
|
|
|
=> (list (take-while neg? [ -4 -3 1 2 5]))
|
|
|
|
[-4, -3]
|
|
|
|
|
|
|
|
=> (list (take-while neg? [ 1 2 3 -4 5]))
|
|
|
|
[]
|
2014-04-29 16:04:21 +02:00
|
|
|
|
2014-12-06 21:32:11 +01:00
|
|
|
.. _zipwith-fn:
|
2014-04-29 16:04:21 +02:00
|
|
|
|
|
|
|
zipwith
|
|
|
|
-------
|
|
|
|
|
|
|
|
.. versionadded:: 0.9.13
|
|
|
|
|
|
|
|
Usage: ``(zipwith fn coll ...)``
|
|
|
|
|
2014-12-07 07:05:52 +01:00
|
|
|
Equivalent to ``zip``, but uses a multi-argument function instead of creating
|
|
|
|
a tuple. If ``zipwith`` is called with N collections, then *fn* must accept
|
|
|
|
N arguments.
|
2014-04-29 16:04:21 +02:00
|
|
|
|
2014-12-07 07:35:32 +01:00
|
|
|
.. code-block:: hy
|
2014-04-29 16:04:21 +02:00
|
|
|
|
|
|
|
=> (import operator)
|
|
|
|
=> (list (zipwith operator.add [1 2 3] [4 5 6]))
|
|
|
|
[5, 7, 9]
|