[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/el-search 94b79e5 149/332: Add new pattern type `de-mor
From: |
Stefan Monnier |
Subject: |
[elpa] externals/el-search 94b79e5 149/332: Add new pattern type `de-morgan' |
Date: |
Tue, 1 Dec 2020 15:48:32 -0500 (EST) |
branch: externals/el-search
commit 94b79e510d3fb3fce488285e94f3bc59de2967b9
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
Add new pattern type `de-morgan'
Add pattern `de-morgan' which allows to simplify expressions by
applying de Morgan's law.
---
el-search-x.el | 43 ++++++++++++++++++++++++++++++++++++++++++-
el-search.el | 5 ++++-
2 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/el-search-x.el b/el-search-x.el
index ef11c3d..5164c0f 100644
--- a/el-search-x.el
+++ b/el-search-x.el
@@ -374,7 +374,48 @@ expression matching the `change' pattern will be matched."
'(outermost _))
-;;; Patterns for stylistic rewriting
+;;; Patterns for stylistic rewriting and syntactical simplification
+
+;;; de Morgan
+
+(el-search-defpattern de-morgan (&optional replacement)
+ "Matches forms that can be simplified by applying de Morgan.
+Matched are all expressions of the form
+
+ (or (not A1) (not A2) ...)
+
+and
+
+ (and (not B1) (not B2) ...)
+
+where at least two `not' expressions are present.
+
+REPLACEMENT, when specified, should be a variable, and will be
+bound to a semantically equivalent expression with de Morgan's
+law been applied, namely
+
+ (not (and A1 A2 ...))
+
+or
+
+ (not (or B1 B2 ...))
+
+respectively.
+
+Note that when `el-search-query-replace'ing with this pattern
+type, it's possible that de Morgan can be applied again, so you
+may want to check that."
+ (let ((functor (make-symbol "functor"))
+ (nots (make-symbol "nots"))
+ (arg (make-symbol "arg")))
+ `(and `(,(and (or 'or 'and) ,functor) . ,,nots)
+ (guard (and (consp ,nots) (not (cdr (last ,nots))))) ;check for a
proper non-empty list
+ (guard (cl-every (lambda (,arg) (pcase ,arg (`(not ,_) t))) ,nots))
+ (let (pred identity) (cdr ,nots))
+ ,@(and replacement
+ (not (eq '_ replacement))
+ `((let ,replacement `(not (,(if (eq ,functor 'or) 'and 'or)
+ ,@(mapcar #'cadr ,nots)))))))))
;;;; Iffy `if's
diff --git a/el-search.el b/el-search.el
index aa8d464..cb2c0f7 100644
--- a/el-search.el
+++ b/el-search.el
@@ -7,7 +7,7 @@
;; Created: 29 Jul 2015
;; Keywords: lisp
;; Compatibility: GNU Emacs 25
-;; Version: 1.3
+;; Version: 1.3.1
;; Package-Requires: ((emacs "25") (stream "2.2.3"))
@@ -27,6 +27,9 @@
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+;; Dedicated to my Grandfather Fritz
+
+
;;; Commentary:
;; This package implements an expression based interactive search tool
- [elpa] externals/el-search 2871f22 178/332: Recover from search head pointing to a killed buffer, (continued)
- [elpa] externals/el-search 2871f22 178/332: Recover from search head pointing to a killed buffer, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search cf5b5a9 177/332: Display an x/y-style match count in the echo area, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search ca6b9f2 183/332: Add a PROMPT arg to `el-search--read-pattern-for-interactive', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search d2b8f84 184/332: New command `el-search-count-matches', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 468745a 185/332: Show match count for `el-search-query-replace', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search c80df81 186/332: Fix resuming search in a modified buffer, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 0b93a25 188/332: * el-search/el-search.el: Minor tweak., Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 145ce47 102/332: Update copyright, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 24d0638 099/332: Rewrite the `change' and `changed' patterns, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search da31900 146/332: Update some copyrights, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 94b79e5 149/332: Add new pattern type `de-morgan',
Stefan Monnier <=
- [elpa] externals/el-search 3b73e0e 154/332: Extend heuristic matching to top-level sexps, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 0cff5d2 153/332: Recompile search pattern when resuming searches, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 51a539a 158/332: Implement multi-buffer query-replace, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 56d9f20 165/332: Add some useful commands for *El Occur* buffers, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 40217c0 174/332: Fix replacing matches with nil, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 1bfe7c0 110/332: Simplify `el-search--transform-nontrivial-lpat', Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 6ff7aa4 116/332: Work around Emacs bug#24542, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 817c902 123/332: Document change-revision transformer function; make a defcustom, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 2d6aad6 132/332: Explicitly `error' when trying to jump to invalid search head, Stefan Monnier, 2020/12/01
- [elpa] externals/el-search 8875d2a 137/332: Avoid infinite recursion in circular programs, Stefan Monnier, 2020/12/01