[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/dash 8599380 270/316: Optimize -is-prefix? and -is-suff
From: |
ELPA Syncer |
Subject: |
[elpa] externals/dash 8599380 270/316: Optimize -is-prefix? and -is-suffix? |
Date: |
Mon, 15 Feb 2021 15:58:15 -0500 (EST) |
branch: externals/dash
commit 859938051168dc1240156c01949ba9dde80ca457
Author: Basil L. Contovounesios <contovob@tcd.ie>
Commit: Basil L. Contovounesios <contovob@tcd.ie>
Optimize -is-prefix? and -is-suffix?
* dash.el (-is-prefix?): Stop looping when prefix runs out, even if
list starts with nil elements.
(-is-suffix?): Avoid reversing arguments; just use member.
* dev/examples.el (-is-prefix?, -is-suffix?): Extend tests.
* README.md:
* dash.texi: Regenerate docs.
---
README.md | 8 ++++----
dash.el | 18 ++++++++++--------
dash.texi | 8 ++++----
dev/examples.el | 31 +++++++++++++++++++++++++++----
4 files changed, 45 insertions(+), 20 deletions(-)
diff --git a/README.md b/README.md
index 20be9f6..4f137b2 100644
--- a/README.md
+++ b/README.md
@@ -1313,9 +1313,9 @@ Alias: `-same-items-p`
#### -is-prefix? `(prefix list)`
-Return non-nil if `prefix` is prefix of `list`.
+Return non-nil if `prefix` is a prefix of `list`.
-Alias: `-is-prefix-p`
+Alias: `-is-prefix-p`.
```el
(-is-prefix? '(1 2 3) '(1 2 3 4 5)) ;; => t
@@ -1325,9 +1325,9 @@ Alias: `-is-prefix-p`
#### -is-suffix? `(suffix list)`
-Return non-nil if `suffix` is suffix of `list`.
+Return non-nil if `suffix` is a suffix of `list`.
-Alias: `-is-suffix-p`
+Alias: `-is-suffix-p`.
```el
(-is-suffix? '(3 4 5) '(1 2 3 4 5)) ;; => t
diff --git a/dash.el b/dash.el
index 74a20d7..b5398c2 100644
--- a/dash.el
+++ b/dash.el
@@ -2604,20 +2604,22 @@ Alias: `-same-items-p'"
(defalias '-same-items-p '-same-items?)
(defun -is-prefix? (prefix list)
- "Return non-nil if PREFIX is prefix of LIST.
+ "Return non-nil if PREFIX is a prefix of LIST.
-Alias: `-is-prefix-p'"
+Alias: `-is-prefix-p'."
(declare (pure t) (side-effect-free t))
- (--each-while list (equal (car prefix) it)
- (!cdr prefix))
- (not prefix))
+ (--each-while list (and (equal (car prefix) it)
+ (!cdr prefix)))
+ (null prefix))
(defun -is-suffix? (suffix list)
- "Return non-nil if SUFFIX is suffix of LIST.
+ "Return non-nil if SUFFIX is a suffix of LIST.
-Alias: `-is-suffix-p'"
+Alias: `-is-suffix-p'."
(declare (pure t) (side-effect-free t))
- (-is-prefix? (reverse suffix) (reverse list)))
+ (cond ((null suffix))
+ ((setq list (member (car suffix) list))
+ (equal (cdr suffix) (cdr list)))))
(defun -is-infix? (infix list)
"Return non-nil if INFIX is infix of LIST.
diff --git a/dash.texi b/dash.texi
index fdeb0d4..43222f2 100644
--- a/dash.texi
+++ b/dash.texi
@@ -1854,9 +1854,9 @@ Alias: @code{-same-items-p}
@anchor{-is-prefix?}
@defun -is-prefix? (prefix list)
-Return non-nil if @var{prefix} is prefix of @var{list}.
+Return non-nil if @var{prefix} is a prefix of @var{list}.
-Alias: @code{-is-prefix-p}
+Alias: @code{-is-prefix-p}.
@example
@group
@@ -1876,9 +1876,9 @@ Alias: @code{-is-prefix-p}
@anchor{-is-suffix?}
@defun -is-suffix? (suffix list)
-Return non-nil if @var{suffix} is suffix of @var{list}.
+Return non-nil if @var{suffix} is a suffix of @var{list}.
-Alias: @code{-is-suffix-p}
+Alias: @code{-is-suffix-p}.
@example
@group
diff --git a/dev/examples.el b/dev/examples.el
index a11f3fb..82f5ebb 100644
--- a/dev/examples.el
+++ b/dev/examples.el
@@ -666,16 +666,39 @@ value rather than consuming a list to produce a single
value."
(-is-prefix? '(1 2 3) '(1 2 3 4 5)) => t
(-is-prefix? '(1 2 3 4 5) '(1 2 3)) => nil
(-is-prefix? '(1 3) '(1 2 3 4 5)) => nil
- (-is-prefix? '(1 2 3) '(1 2 4 5)) => nil)
+ (-is-prefix? '(1 2 3) '(1 2 4 5)) => nil
+ (-is-prefix? '(1 2 3) '(1 2)) => nil
+ (-is-prefix? '(1 2) '(1 2)) => t
+ (-is-prefix? '(1) '(1 2)) => t
+ (-is-prefix? '(1) '(1)) => t
+ (-is-prefix? '() '(1)) => t
+ (-is-prefix? '() '()) => t
+ (-is-prefix? '() '(nil)) => t
+ (-is-prefix? '(nil) '(nil)) => t
+ (-is-prefix? '(nil) '()) => nil
+ (-is-prefix? '(2 3) '(1 2 3)) => nil
+ (let* ((p (list 1 2)) (l p) (c (copy-sequence p)))
+ (and (-is-prefix? p l) (equal p c) (equal l c)))
+ => t)
(defexamples -is-suffix?
(-is-suffix? '(3 4 5) '(1 2 3 4 5)) => t
(-is-suffix? '(1 2 3 4 5) '(3 4 5)) => nil
(-is-suffix? '(3 5) '(1 2 3 4 5)) => nil
(-is-suffix? '(3 4 5) '(1 2 3 5)) => nil
- (let ((l '(1 2 3)))
- (list (-is-suffix? '(3) l)
- l)) => '(t (1 2 3)))
+ (-is-suffix? '(1 2 3) '(2 3)) => nil
+ (-is-suffix? '(1 2) '(1 2)) => t
+ (-is-suffix? '(2) '(1 2)) => t
+ (-is-suffix? '(1) '(1)) => t
+ (-is-suffix? '() '(1)) => t
+ (-is-suffix? '() '()) => t
+ (-is-suffix? '() '(nil)) => t
+ (-is-suffix? '(nil) '(nil)) => t
+ (-is-suffix? '(nil) '()) => nil
+ (-is-suffix? '(1 2) '(1 2 3)) => nil
+ (let* ((s (list 1 2)) (l s) (c (copy-sequence s)))
+ (and (-is-suffix? s l) (equal s c) (equal l c)))
+ => t)
(defexamples -is-infix?
(-is-infix? '(1 2 3) '(1 2 3 4 5)) => t
- [elpa] externals/dash 0e97578 316/316: Release dash 2.18.0 and dash-functional 1.3.0, (continued)
- [elpa] externals/dash 0e97578 316/316: Release dash 2.18.0 and dash-functional 1.3.0, ELPA Syncer, 2021/02/15
- [elpa] externals/dash d98f5a0 235/316: Update for -iota, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 0f13e5e 246/316: Prefer push over add-to-list, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 9703eac 249/316: ; Fix Edebug spec in last change, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 4fb9613 255/316: Avoid evaluating file-local variables, ELPA Syncer, 2021/02/15
- [elpa] externals/dash ff5ed7a 261/316: Extend -keep docs and tests, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 5d8de45 262/316: ; Fix recent typo in -filter & -remove docstrings, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 7fc72d9 263/316: Fix Markdown quoting, ELPA Syncer, 2021/02/15
- [elpa] externals/dash e5e5363 272/316: Merge pull request #367 from HKey/fix-handling-nil, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 8bd2887 269/316: Move pre-commit.sh under dev/, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 8599380 270/316: Optimize -is-prefix? and -is-suffix?,
ELPA Syncer <=
- [elpa] externals/dash 5362be7 275/316: Use actual advertised function signature in manual, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 926eb0b 280/316: Add forceful Makefile targets, ELPA Syncer, 2021/02/15
- [elpa] externals/dash eedc2af 279/316: Fix docstring Texinfo generation, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 7ee12ee 283/316: Use buffers for Texinfo generation, ELPA Syncer, 2021/02/15
- [elpa] externals/dash baf9147 285/316: Simplify Texinfo generation, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 7ec3975 292/316: Avoid deleting docs in old Emacs versions, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 3cfbebf 293/316: Port more Texinfo generation changes to Markdown, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 03748d8 297/316: Prefer '() over () in printed examples, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 6ffcd89 299/316: Print actual error messages in README, ELPA Syncer, 2021/02/15
- [elpa] externals/dash 4f3238b 300/316: Strip leading zeros from octal escapes in Emacs 26, ELPA Syncer, 2021/02/15