From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: Installing cond* in core Date: Fri, 2 Feb 2024 15:24:01 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24992"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Richard Stallman , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Feb 02 16:24:59 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rVvPW-0006G2-TG for ged-emacs-devel@m.gmane-mx.org; Fri, 02 Feb 2024 16:24:58 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rVvOy-0004qR-Oh; Fri, 02 Feb 2024 10:24:24 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rVvOw-0004q6-9x for emacs-devel@gnu.org; Fri, 02 Feb 2024 10:24:22 -0500 Original-Received: from mail.muc.de ([193.149.48.3]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rVvOr-000544-1g for emacs-devel@gnu.org; Fri, 02 Feb 2024 10:24:21 -0500 Original-Received: (qmail 80100 invoked by uid 3782); 2 Feb 2024 16:24:01 +0100 Original-Received: from acm.muc.de (p4fe15e6a.dip0.t-ipconnect.de [79.225.94.106]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Fri, 02 Feb 2024 16:24:01 +0100 Original-Received: (qmail 9915 invoked by uid 1000); 2 Feb 2024 15:24:01 -0000 Content-Disposition: inline In-Reply-To: X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.3; envelope-from=acm@muc.de; helo=mail.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:315752 Archived-At: Hello, Stefan. On Fri, Feb 02, 2024 at 08:17:25 -0500, Stefan Monnier wrote: > > > I think the question is rather: why should we have two equivalent and > > > almost identical matching syntaxes and implementations? > > That is the easiest way to make cond* function. > Only if you consider "easiest" at each small incremental step. > The overall cost of what you've done is already much higher :-) > > I do not understand the pcase code for implementing pattern matching, > You don't need to understand it. I've needed to understand it, and I also found it difficult to understand. I've also found difficult the macro expansions which pcase produces. cond* might be easier here, though it's too soon to tell. > > A priori, I suspect it won't fit. cond*-subpat, which does this job > > in cond*, passes data up and down the recursion. I can't tell whether > > pcase does something comparable. Also, cond*-subpat does not generate > > the overall structure of a clause -- its caller, cond*-match, does > > that. > Throw away cond*-subpat. Just rewrite > (cond* > ((match* PAT FORM) THEN) > . ELSE) > into something like > (pcase FORM > (PAT THEN) > (_ (cond* . ELSE))) > And presumably for > (cond* > ((match* PAT FORM)) > . REST) > you'd rewrite it to > (pcase-let ((PATH FORM)) > (cond* . REST)) > No need to look inside or understand `pcase.el` at all! But that would rule out the possibility of simplifying pcase by rewriting it in terms of cond*. ;-) > Stefan -- Alan Mackenzie (Nuremberg, Germany).