Adding a simple coll?
function to the core
* hy/core/language.hy: -Added a simple coll? function that checks whether the given argument is an iterable and not a string, - Also replaced the check in `flatten` by coll? * tests/native_tests/core.hy: Tests updated for checking coll?
This commit is contained in:
parent
48be005fa3
commit
f159f1499b
@ -30,6 +30,10 @@
|
|||||||
(if (not (numeric? x))
|
(if (not (numeric? x))
|
||||||
(raise (TypeError (.format "{0!r} is not a number" x)))))
|
(raise (TypeError (.format "{0!r} is not a number" x)))))
|
||||||
|
|
||||||
|
(defn coll? [coll]
|
||||||
|
"Checks whether item is a collection"
|
||||||
|
(and (iterable? coll) (not (string? coll))))
|
||||||
|
|
||||||
(defn cycle [coll]
|
(defn cycle [coll]
|
||||||
"Yield an infinite repetition of the items in coll"
|
"Yield an infinite repetition of the items in coll"
|
||||||
(setv seen [])
|
(setv seen [])
|
||||||
@ -112,7 +116,7 @@
|
|||||||
|
|
||||||
(defn flatten [coll]
|
(defn flatten [coll]
|
||||||
"Return a single flat list expanding all members of coll"
|
"Return a single flat list expanding all members of coll"
|
||||||
(if (and (iterable? coll) (not (string? coll)))
|
(if (coll? coll)
|
||||||
(_flatten coll [])
|
(_flatten coll [])
|
||||||
(raise (TypeError (.format "{0!r} is not a collection" coll)))))
|
(raise (TypeError (.format "{0!r} is not a collection" coll)))))
|
||||||
|
|
||||||
@ -298,8 +302,8 @@
|
|||||||
(_numeric_check n)
|
(_numeric_check n)
|
||||||
(= n 0))
|
(= n 0))
|
||||||
|
|
||||||
(def *exports* '[calling-module-name cycle dec distinct disassemble drop
|
(def *exports* '[calling-module-name coll? cycle dec distinct disassemble
|
||||||
drop-while empty? even? filter flatten float? gensym
|
drop drop-while empty? even? filter flatten float? gensym
|
||||||
inc instance? integer integer? iterable? iterate
|
inc instance? integer integer? iterable? iterate
|
||||||
iterator? macroexpand macroexpand-1 neg? nil? none?
|
iterator? macroexpand macroexpand-1 neg? nil? none?
|
||||||
nth numeric? odd? pos? remove repeat repeatedly second
|
nth numeric? odd? pos? remove repeat repeatedly second
|
||||||
|
@ -30,6 +30,14 @@
|
|||||||
(defn assert-equal [x y]
|
(defn assert-equal [x y]
|
||||||
(assert (= x y)))
|
(assert (= x y)))
|
||||||
|
|
||||||
|
(defn test-coll? []
|
||||||
|
"NATIVE: testing coll?"
|
||||||
|
(assert-true (coll? [1 2 3]))
|
||||||
|
(assert-true (coll? {"a" 1 "b" 2}))
|
||||||
|
(assert-true (coll? (range 10)))
|
||||||
|
(assert-false (coll? "abc"))
|
||||||
|
(assert-false (coll? 1)))
|
||||||
|
|
||||||
(defn test-cycle []
|
(defn test-cycle []
|
||||||
"NATIVE: testing cycle"
|
"NATIVE: testing cycle"
|
||||||
(assert-equal (list (cycle [])) [])
|
(assert-equal (list (cycle [])) [])
|
||||||
|
Loading…
Reference in New Issue
Block a user