From a41a3c7edc647d7d9bcb64913c03fae22ef71345 Mon Sep 17 00:00:00 2001 From: Abhishek L Date: Tue, 4 Feb 2014 01:35:41 +0530 Subject: [PATCH 1/5] faster distinct: maintain seen items in a set * hy/core/language.hy: maintain the seen items in a set instead of a list in `distinct`. This is much faster for lookups. --- hy/core/language.hy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hy/core/language.hy b/hy/core/language.hy index 520d3f1..7fd5b2a 100644 --- a/hy/core/language.hy +++ b/hy/core/language.hy @@ -75,12 +75,12 @@ (defn distinct [coll] "Return a generator from the original collection with duplicates removed" - (let [[seen []] [citer (iter coll)]] + (let [[seen (set)] [citer (iter coll)]] (for* [val citer] (if (not_in val seen) (do (yield val) - (.append seen val)))))) + (.add seen val)))))) (defn drop [count coll] "Drop `count` elements from `coll` and yield back the rest" From 1af8e47a2000969592fb2160dd603824812eb4e1 Mon Sep 17 00:00:00 2001 From: Steven Degutis Date: Mon, 10 Feb 2014 17:29:35 -0600 Subject: [PATCH 2/5] Making readme more friendly --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe48757..bd66b81 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Why? Well, I wrote Hy to help people realize one thing about Python: -It's really goddamn awesome. +It's really awesome. Oh, and lisps are neat. From 24a1567b007c8cf152bc587b485771543ccee5c2 Mon Sep 17 00:00:00 2001 From: han semaj Date: Tue, 11 Feb 2014 21:42:56 +1300 Subject: [PATCH 3/5] Implement every? and some --- docs/language/core.rst | 52 ++++++++++++++++++++++++++++++++++++++ hy/core/language.hy | 12 +++++++-- tests/native_tests/core.hy | 15 ++++++++++- 3 files changed, 76 insertions(+), 3 deletions(-) diff --git a/docs/language/core.rst b/docs/language/core.rst index 57f00b2..7781d21 100644 --- a/docs/language/core.rst +++ b/docs/language/core.rst @@ -138,6 +138,32 @@ Return True if ``coll`` is empty, i.e. ``(= 0 (len coll))``. False +.. _every?-fn: + +every? +------ + +.. versionadded:: 0.9.13 + +Usage: ``(every? pred coll)`` + +Return True if ``(pred x)`` is logical true for every ``x`` in ``coll``, otherwise False. Return True if ``coll`` is empty. + +.. code-block:: clojure + + => (every? even? [2 4 6]) + True + + => (every? even? [1 3 5]) + False + + => (every? even? [2 4 5]) + False + + => (every? even? []) + True + + .. _float?-fn: float? @@ -570,6 +596,32 @@ Return the second member of ``coll``. Equivalent to 1 +.. _some-fn: + +some +---- + +.. versionadded:: 0.9.13 + +Usage: ``(some pred coll)`` + +Return True if ``(pred x)`` is logical true for any ``x`` in ``coll``, otherwise False. Return False if ``coll`` is empty. + +.. code-block:: clojure + + => (some even? [2 4 6]) + True + + => (some even? [1 3 5]) + False + + => (some even? [1 3 6]) + True + + => (some even? []) + False + + .. _string?-fn: string? diff --git a/hy/core/language.hy b/hy/core/language.hy index 7fd5b2a..d8b0df8 100644 --- a/hy/core/language.hy +++ b/hy/core/language.hy @@ -108,6 +108,10 @@ (_numeric-check n) (= (% n 2) 0)) +(defn every? [pred coll] + "Return true if (pred x) is logical true for every x in coll, else false" + (all (map pred coll))) + (defn fake-source-positions [tree] "Fake the source positions for a given tree" (if (and (iterable? tree) (not (string? tree))) @@ -294,6 +298,10 @@ "Return second item from `coll`" (get coll 1)) +(defn some [pred coll] + "Return true if (pred x) is logical true for any x in coll, else false" + (any (map pred coll))) + (defn string [x] "Cast x as current string implementation" (if-python2 @@ -338,9 +346,9 @@ (= n 0)) (def *exports* '[calling-module-name coll? cons cons? cycle dec distinct - disassemble drop drop-while empty? even? first filter + disassemble drop drop-while empty? even? every? first filter flatten float? gensym identity inc instance? integer integer? integer-char? iterable? iterate iterator? list* macroexpand macroexpand-1 neg? nil? none? nth numeric? odd? pos? remove repeat repeatedly rest second - string string? take take-nth take-while zero?]) + some string string? take take-nth take-while zero?]) diff --git a/tests/native_tests/core.hy b/tests/native_tests/core.hy index d9e27a3..c973948 100644 --- a/tests/native_tests/core.hy +++ b/tests/native_tests/core.hy @@ -123,6 +123,13 @@ (try (even? None) (catch [e [TypeError]] (assert (in "not a number" (str e)))))) +(defn test-every? [] + "NATIVE: testing the every? function" + (assert-true (every? even? [2 4 6])) + (assert-false (every? even? [1 3 5])) + (assert-false (every? even? [2 4 5])) + (assert-true (every? even? []))) + (defn test-filter [] "NATIVE: testing the filter function" (setv res (list (filter pos? [ 1 2 3 -4 5]))) @@ -399,6 +406,13 @@ (assert-equal 2 (second [1 2])) (assert-equal 3 (second [2 3 4]))) +(defn test-some [] + "NATIVE: testing the some function" + (assert-true (some even? [2 4 6])) + (assert-false (some even? [1 3 5])) + (assert-true (some even? [1 3 6])) + (assert-false (some even? []))) + (defn test-string? [] "NATIVE: testing string?" (assert-true (string? "foo")) @@ -456,4 +470,3 @@ (assert-equal res [None None]) (setv res (list (take-while (fn [x] (not (none? x))) [1 2 3 4 None 5 6 None 7]))) (assert-equal res [1 2 3 4])) - From 6b4e3940aaef04d63942913ba0dd4d9e668d5f70 Mon Sep 17 00:00:00 2001 From: Richard Parsons Date: Tue, 11 Feb 2014 15:25:17 +0000 Subject: [PATCH 4/5] updated import documentation --- AUTHORS | 1 + docs/language/api.rst | 3 +++ 2 files changed, 4 insertions(+) diff --git a/AUTHORS b/AUTHORS index e54d53f..6fd2f4a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -39,3 +39,4 @@ * Fatih Kadir Akın * Jack Hooper * Brian McKenna +* Richard Parsons diff --git a/docs/language/api.rst b/docs/language/api.rst index 7e991b3..2313921 100644 --- a/docs/language/api.rst +++ b/docs/language/api.rst @@ -762,6 +762,9 @@ of import you can use. [os.path [exists isdir isfile]] [sys :as systest]) + ;; Import all module functions into current namespace + (import [sys [*]]) + kwapply ------- From 3c9947a3f6b93e94ddc204455eebd17c9239489d Mon Sep 17 00:00:00 2001 From: Paul Tagliamonte Date: Wed, 12 Feb 2014 23:59:36 -0500 Subject: [PATCH 5/5] add @microamp to authors --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 6fd2f4a..af95f5a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -40,3 +40,4 @@ * Jack Hooper * Brian McKenna * Richard Parsons +* han semaj