From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.devel Subject: Re: Anaphoric macros: increase visibility Date: Sun, 15 Jan 2017 03:26:23 +0100 Message-ID: <878tqdqcs0.fsf@web.de> References: <87wpdyivvf.fsf@web.de> <87k29xqhqp.fsf@web.de> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1484447234 12061 195.159.176.226 (15 Jan 2017 02:27:14 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 15 Jan 2017 02:27:14 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.91 (gnu/linux) Cc: Emacs developers To: Tino Calancha Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jan 15 03:27:10 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cSaX6-0001vs-Ty for ged-emacs-devel@m.gmane.org; Sun, 15 Jan 2017 03:27:01 +0100 Original-Received: from localhost ([::1]:50069 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cSaXB-0007PI-M8 for ged-emacs-devel@m.gmane.org; Sat, 14 Jan 2017 21:27:05 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35085) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cSaWb-0007Nh-VE for emacs-devel@gnu.org; Sat, 14 Jan 2017 21:26:30 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cSaWY-0007dW-S5 for emacs-devel@gnu.org; Sat, 14 Jan 2017 21:26:29 -0500 Original-Received: from mout.web.de ([212.227.17.12]:63234) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cSaWY-0007d5-Hw for emacs-devel@gnu.org; Sat, 14 Jan 2017 21:26:26 -0500 Original-Received: from drachen.dragon ([92.77.164.93]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MUnYm-1bwcqS0XjI-00YC0g; Sun, 15 Jan 2017 03:26:24 +0100 In-Reply-To: <87k29xqhqp.fsf@web.de> (Michael Heerdegen's message of "Sun, 15 Jan 2017 01:39:10 +0100") X-Provags-ID: V03:K0:C0JdaUmcpTl664IPEetB5loHA3arQBWbgvNChlrj/7AdzoDk7vW E8aWivpWaQrXIk+cFkzb1DQ01OwjnkQ/JldXFvZ8FuZ700ZtKuxfB1pBjk02uIKEmpyPrjl 4D0S0Y5Qey5N/Tky4OhZiafa8hP68IcHdhivEGYEUqyxGaIwD+clM5HEQ+nx1PCH8Cb7imr YuWStzTQi7el2pGfCJATA== X-UI-Out-Filterresults: notjunk:1;V01:K0:sD+Y+JSWbek=:6GlYK9lKZIcxp46YeJocMb +nuC/wZw0oiL8QIeM9DFIMLJ6HH+bVqPtZrGrLM5lfbHnR6zDXPFOkXm9fL4I/GEpMMNTNvgh cTngO1GZLqo7dNdGgSDSRUt3J/lOR/rcN8GzU+QU3ADkZGG7tg+Ce24xQZWPSXt7yvED/nVs5 VcEW0P2X20hdyXlwSrJW8Dro80z8jTkstq7/j5Q7Nad+dCBqzHmPeavKi+yNX6RpwyWvtZvIh jtDL+l118+dZItSClxqH33MB+YfIn+7P1LFU2JzTPrZ+haEBSIZLRGl7mx++zbneec9KBsJTY de36jZEfs0822pwwDDIT22O7TmxiMC5vWzFJBeSTPpSP3H/Fh1xQ4mG33wTfSUIpQJMKe51Kr q2YZxpIFBARPaSME3fXqRkI36eRmFrA/3Vm1X3DpJVBn2qAyEQZWsB9iqSDcNQg03TqwPFwYc 5kHkUsXvoMe2J9J8WQSmqNvGDy+OruVhmNc/FX/n6EJtitgQ/jd08lKLiue2GuKDJqFyc8FmQ ajRZbz4Q+GjLg36WYvbmiH6BVJ4+z8vJuH4ddJcg8JaJmttT2f6vvrRxR3Lh8A/WoQJIe2xcx yCnRjyHr3pPf3QXNwPimmHNDZrIGwVULFoPTM/hRhuK4DsiNjgzm4YiIrpfH4Ar3TYRTXSuag HQ8vvrC0h7e74uPX5+qCEEkhcNAa54NPVSXTynulMhcHwKUTeFV158qfkxV+KIuuADPCk2BRu x6aiuciiJ3JnbfaJUsX5rYH/NPN1kFAnH5D2zxgQsjuGJNfazAN3lrqL5NR3IIk2XztIlDSl X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.17.12 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:211306 Archived-At: Michael Heerdegen writes: > And I often think that it would be cool to couple them with pcase > pattern matching. OTOH we already have `pcase-let', but I can't get > along with its semantics, e.g. > > (pcase-let ((`(,a ,b) '(1 2 3))) > (list a b)) > > ==> (1 2) > > although the pattern doesn't match. I think I would prefer something like #+begin_src emacs-lisp (defmacro pwhen (pairs &rest body) (declare (indent 1)) `(pcase nil ((and ,@(mapcar (lambda (pair) (cons 'let pair)) pairs)) ,@body))) #+end_src This is similar to `when-let' but instead of a non-nil test, you can use any test you want (via pattern matching). There would not be an implicit test for whether a matched expression evals to something non-nil, however. Example: #+begin_src emacs-lisp (defun test-pwhen (thing) (pwhen ((`(,x ,y) thing) ((pred identity) x)) (message "passed with x: %S and y:%S" x y))) #+end_src (test-pwhen 37) ==> nil (test-pwhen '(1 2 3)) ==> nil (test-pwhen '(nil 32)) ==> nil (test-pwhen '(1 2)) ==> "passed with x: 1 and y:2" Michael.