diff options
| author | K. Handa <handa@gnu.org> | 2015-09-08 20:43:11 +0900 |
|---|---|---|
| committer | K. Handa <handa@gnu.org> | 2015-09-08 20:43:11 +0900 |
| commit | 94ed5167557112fb00eeca05e62589db744206de (patch) | |
| tree | 80a544f8534802dd61fbd218b97441d3419dbf6b /lisp/emacs-lisp/seq.el | |
| parent | 33f2e0023a5ef03db3e99ade0b93a7a1a913dbe1 (diff) | |
| parent | 10e7f7de910ca816799062f33b830f7598801f0e (diff) | |
| download | emacs-94ed5167557112fb00eeca05e62589db744206de.tar.gz | |
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
Diffstat (limited to 'lisp/emacs-lisp/seq.el')
| -rw-r--r-- | lisp/emacs-lisp/seq.el | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/lisp/emacs-lisp/seq.el b/lisp/emacs-lisp/seq.el index a17b0a8f1b9..8dc91471312 100644 --- a/lisp/emacs-lisp/seq.el +++ b/lisp/emacs-lisp/seq.el @@ -252,14 +252,6 @@ If SEQ is empty, return INITIAL-VALUE and FUNCTION is not called." (setq acc (funcall function acc elt))) acc))) -(cl-defgeneric seq-some-p (pred seq) - "Return any element for which (PRED element) is non-nil in SEQ, nil otherwise." - (catch 'seq--break - (seq-doseq (elt seq) - (when (funcall pred elt) - (throw 'seq--break elt))) - nil)) - (cl-defgeneric seq-every-p (pred seq) "Return non-nil if (PRED element) is non-nil for all elements of the sequence SEQ." (catch 'seq--break @@ -268,6 +260,16 @@ If SEQ is empty, return INITIAL-VALUE and FUNCTION is not called." (throw 'seq--break nil))) t)) +(cl-defgeneric seq-some (pred seq) + "Return non-nil if (PRED element) is non-nil for any element in SEQ, nil otherwise. +If so, return the non-nil value returned by PRED." + (catch 'seq--break + (seq-doseq (elt seq) + (let ((result (funcall pred elt))) + (when result + (throw 'seq--break result)))) + nil)) + (cl-defgeneric seq-count (pred seq) "Return the number of elements for which (PRED element) is non-nil in SEQ." (let ((count 0)) @@ -276,19 +278,19 @@ If SEQ is empty, return INITIAL-VALUE and FUNCTION is not called." (setq count (+ 1 count)))) count)) -(cl-defgeneric seq-contains-p (seq elt &optional testfn) +(cl-defgeneric seq-contains (seq elt &optional testfn) "Return the first element in SEQ that equals to ELT. Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-some-p (lambda (e) - (funcall (or testfn #'equal) elt e)) - seq)) + (seq-some (lambda (e) + (funcall (or testfn #'equal) elt e)) + seq)) (cl-defgeneric seq-uniq (seq &optional testfn) "Return a list of the elements of SEQ with duplicates removed. TESTFN is used to compare elements, or `equal' if TESTFN is nil." (let ((result '())) (seq-doseq (elt seq) - (unless (seq-contains-p result elt testfn) + (unless (seq-contains result elt testfn) (setq result (cons elt result)))) (nreverse result))) @@ -313,7 +315,7 @@ negative integer or 0, nil is returned." "Return a list of the elements that appear in both SEQ1 and SEQ2. Equality is defined by TESTFN if non-nil or by `equal' if nil." (seq-reduce (lambda (acc elt) - (if (seq-contains-p seq2 elt testfn) + (if (seq-contains seq2 elt testfn) (cons elt acc) acc)) (seq-reverse seq1) @@ -323,7 +325,7 @@ Equality is defined by TESTFN if non-nil or by `equal' if nil." "Return a list of the elements that appear in SEQ1 but not in SEQ2. Equality is defined by TESTFN if non-nil or by `equal' if nil." (seq-reduce (lambda (acc elt) - (if (not (seq-contains-p seq2 elt testfn)) + (if (not (seq-contains seq2 elt testfn)) (cons elt acc) acc)) (seq-reverse seq1) |
