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: pcase-if-let? Date: Thu, 29 Mar 2018 06:39:28 +0200 Message-ID: <871sg3ijgf.fsf@web.de> References: <871sg3eqi5.fsf@web.de> <0e8139b0-b59c-1d7e-29db-66170858f8ca@lanl.gov> <87woxvd947.fsf@web.de> <87605filw6.fsf@web.de> <60dc117a-7ee2-42d2-acbc-49dae9ec6ae1@default> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1522298268 2975 195.159.176.226 (29 Mar 2018 04:37:48 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 29 Mar 2018 04:37:48 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) Cc: Emacs Development To: Drew Adams Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Mar 29 06:37:44 2018 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 1f1PJn-0000hZ-UH for ged-emacs-devel@m.gmane.org; Thu, 29 Mar 2018 06:37:44 +0200 Original-Received: from localhost ([::1]:45822 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f1PLr-0004xE-A6 for ged-emacs-devel@m.gmane.org; Thu, 29 Mar 2018 00:39:51 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:35030) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f1PLk-0004wg-T1 for emacs-devel@gnu.org; Thu, 29 Mar 2018 00:39:45 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f1PLh-0006zI-Of for emacs-devel@gnu.org; Thu, 29 Mar 2018 00:39:44 -0400 Original-Received: from mout.web.de ([212.227.17.12]:34555) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f1PLh-0006yd-EN for emacs-devel@gnu.org; Thu, 29 Mar 2018 00:39:41 -0400 Original-Received: from drachen.dragon ([88.75.99.135]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0M7KN0-1eewJr1x82-00x6ZM; Thu, 29 Mar 2018 06:39:29 +0200 In-Reply-To: <60dc117a-7ee2-42d2-acbc-49dae9ec6ae1@default> (Drew Adams's message of "Wed, 28 Mar 2018 21:14:01 -0700 (PDT)") X-Provags-ID: V03:K0:fyCp6h16XZvjdqEgnxptM/AhnqcKLn37kIjhP9+Bn1MFAngDxxc obOLAtLpMutUH18iUPHNqrHgVwDY21aQkSDqJ3Kis5i+glreD0Ax5xG4+VPKdqPStDhs5tx aa4waHsRPhiGJZ3NvSewMBeFLcspa0K+5b+29ekuzHTcTQ92aVi0rKoxSta2u8jyBcmwLkQ kvEV4gVsjN8fkbGb2dAeA== X-UI-Out-Filterresults: notjunk:1;V01:K0:7nnkWhdQaEA=:R1flvdvQezp9u/YYyjdHit lbtTmrN2pWBNNWjzEKvPljI+/v+WI89QynxBd7C11ecJTsvNmaDP63YWnxbFdOGihkdNTNJCd 8Af2fMs99BPIPulJbcTsHp/27cvmzAd63JxvVHbNztJoxxIK3u2/ChpJuFVQ8gfKmvoPUbZ9N 4oPx1XOZ7lS5390Z7n07q3qTv34lp18vtm1vwABZ4wS0//WJkBkCDmWsaMLI3e38LrA75ey6W qHxs/kBE5EcMVAq0zx8JLCDcafoMntRMstdsxGobB3csV2ZoCSyAzPcECWxWOIE3W1cNQ4YE3 mpzkyTyYrCpRnU9J3zAcdpI0U38CjJXj5wj3yC8jP1GQf2akQACWioJ0ZA8/cBDK8D5n2+Arx zCb93KXzb8lEkKmapLcnbtRGzq9gkeprz0c9B9T4x3ivYRsHQXjg4oi32K+yIRuUx8kveRQhf nQxGGb1NBXMNp27CMEfxJ6a/+evmDBWcEJIM4WeHVoHnZMc7n/UXuwy2wPdCCHySLAHTqE9mv fT4COiipuI0mFeoW4F7OwRo/2Z5/sf2LHvJSC7TP6sc9GYMgOG4+HSm5xPyY9UFIOpmcpeP/F lgjJmp7iXK2RP3R2R6ol226PyjgAJsUm1IJK0k5TXSlhxjwCz2kZozrOXJ0mhtetWPK/Je1HC UvSGeCMZSzoBpZG5sYOFkyCw/IlOY2pQcI/8TnEWfcYpYRw91m0KMYT+d1Mnb59uD5xyi3FdT xga1wBXRh7I8vjPTQrPtf61NKFaf4lCyd9ufmx1x6iwQPVdmqOUGTY0NBd8NlV+wxYcKdUjY 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:224135 Archived-At: Drew Adams writes: > We usually try to describe the args in order (first CLAUSES > then THEN-FORM, then ELSE-FORMS. So, for example: > > Depending on CLAUSES, evaluate THEN-FORM or ELSE-FORMS. Thanks, fixed. > And why the asymmetry between THEN being singular > and ELSE being plural? Emacs-Lisp `if' has such an > asymmetry (for a couple of reasons, which aren't > particularly relevant here), but why should this > `pcase-if' construct be asymmetric? Why not make it > symmetric, like `cond' (and `case'), since it's > already a complex, multipurpose critter? I think if we don't make the syntax similar to if, while the semantics is, people would become crazy. If you want something more like `case', well, use `pcase' ;-) > This naming is no longer relevant, is it? There's > no set of "cases" involved. Is there really a big > benefit in naming everything that uses a "pcase-style" > pattern "pcase-"? Presumably you want to > use similar names to convey the fact that they all > do pattern-matching. Yes, your are right with everything, the names are nonsense. I guess we are still in some kind of intermediate state - AFAIK Stefan hopes to integrate the pcase stuff more into Emacs innards some day. Dealing with these wide problems is not what I want to do here. For now, I just want to be consistent with the existing naming scheme. Regards, Michael. P.S.: Here is the updated definition: #+begin_src emacs-lisp (defmacro pcase-if (clauses then &rest elses) "Depending on CLAUSES, evaluate THEN or ELSES. CLAUSES is a list of the form \((PATTERN VALUE-FORM) ...) Successively try to match every `pcase' PATTERN against its VALUE-FORM. When all match, eval THEN, else the ELSES." (declare (indent 2) (debug ((&rest (pcase-PAT &optional form)) form body))) (if (null clauses) then (let ((success-syms '()) (last-success-sym nil)) (dotimes (i (length clauses)) (push (make-symbol (format "matching-%d-success" i)) success-syms)) (cl-callf nreverse success-syms) `(let ,(mapcar (lambda (s) `(,s nil)) success-syms) (pcase nil ((and ,@(mapcar (pcase-lambda (`(,pattern ,value)) `(let (and ,@(and last-success-sym `((guard ,last-success-sym))) ,pattern (let ,(setq last-success-sym (pop success-syms)) t)) ,value)) clauses)) (if ,last-success-sym ,then ,@elses))))))) #+end_src