]> git.eshelyaron.com Git - emacs.git/commitdiff
Add macro `seq-setq`.
authorEarl Hyatt <okamsn@protonmail.com>
Sat, 14 Aug 2021 12:17:55 +0000 (14:17 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 14 Aug 2021 12:17:55 +0000 (14:17 +0200)
* doc/lispref/sequences.texi (seq-setq): Document this macro.

* test/lisp/emacs-lisp/seq-tests.el (test-seq-setq):
Test this macro (bug#50053).

doc/lispref/sequences.texi
test/lisp/emacs-lisp/seq-tests.el

index 20816ce8ca2d9b19e657412acfff28042182b35d..257f5d162eaf0edc84f2814b4401a1645cbf7aca 100644 (file)
@@ -1128,6 +1128,23 @@ assigned to variables as if by @code{setq} instead of as in a
 @end example
 @end defmac
 
+@defmac seq-setq var-sequence val-sequence
+@cindex sequence destructuring
+  This macro works similarly to @code{seq-let}, except that values are
+assigned to variables as if by @code{setq} instead of as in a
+@code{let} binding.
+
+@example
+@group
+(let ((a nil)
+      (b nil))
+  (seq-setq (_ a _ b) '(1 2 3 4))
+  (list a b))
+@result{} (2 4)
+@end group
+@end example
+@end defmac
+
 @defun seq-random-elt sequence
   This function returns an element of @var{sequence} taken at random.
 
index 44e855e2cfad918174ac455c74b501ccd94d965f..5217921d3d7e5c5bf6e6b9308166bbb3c9333ac6 100644 (file)
@@ -407,6 +407,30 @@ Evaluate BODY for each created sequence.
     (should (null b))
     (should (null c))))
 
+(ert-deftest test-seq-setq ()
+  (with-test-sequences (seq '(1 2 3 4))
+    (let (a b c d e)
+      (seq-setq (a b c d e) seq)
+      (should (= a 1))
+      (should (= b 2))
+      (should (= c 3))
+      (should (= d 4))
+      (should (null e)))
+    (let (a b others)
+      (seq-setq (a b &rest others) seq)
+      (should (= a 1))
+      (should (= b 2))
+      (should (same-contents-p others (seq-drop seq 2)))))
+  (let ((a)
+        (seq '(1 (2 (3 (4))))))
+    (seq-setq (_ (_ (_ (a)))) seq)
+    (should (= a 4)))
+  (let (seq a b c)
+    (seq-setq (a b c) seq)
+    (should (null a))
+    (should (null b))
+    (should (null c))))
+
 (ert-deftest test-seq-min-max ()
   (with-test-sequences (seq '(4 5 3 2 0 4))
     (should (= (seq-min seq) 0))