From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ihor Radchenko Newsgroups: gmane.emacs.devel Subject: Re: Instead of pcase Date: Wed, 03 Jan 2024 16:08:23 +0000 Message-ID: <87a5pm762w.fsf@localhost> References: <878r5inysw.fsf@localhost> <878r5ewk81.fsf@localhost> <87h6jxm8d4.fsf@localhost> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21364"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: rms@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Jan 03 17:06:14 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 1rL3l0-0005CO-41 for ged-emacs-devel@m.gmane-mx.org; Wed, 03 Jan 2024 17:06:14 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rL3kH-00014u-9P; Wed, 03 Jan 2024 11:05:29 -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 1rL3kC-00014f-Ly for emacs-devel@gnu.org; Wed, 03 Jan 2024 11:05:24 -0500 Original-Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rL3k5-0002e8-IE for emacs-devel@gnu.org; Wed, 03 Jan 2024 11:05:22 -0500 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 12838240103 for ; Wed, 3 Jan 2024 17:05:12 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1704297913; bh=vtyYCGBiSThanfzxhD69r+bxhOM0C4y3ygCmNL3uHLM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:From; b=Fc19hhy1fsXWhAkt4oxiJLTj1bIBInpnRhqf+XSnW0nrueHjC7j5+LangXdZCthOZ d8SPwpnYynmJ5Zi0Yn77RMtboFcIVCF8Q2jA1vJbdTyxFyuglSvq7FFFQJ9Haf6zXf wPyrlF8DYV4LbT4eAaJ+u0CvUSiw0twpmelFjclVvvts6R0ILjPW84EIrLUoO9oBkd xynhuV1n9WKWXcMuXhS4R/q33ApXtl5G23Axd8eRa2X1pIHcs0jwPM2kP6dPSiBxMP BDsQNcfwpqF7Bf0pn7frL4t9UuHyH0ATZ7SJATCz6N4tQIXxQe9yzM8Tsb+UeYxP3T IkgyuXFKid2Rg== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4T4vgr0y5Pz6twh; Wed, 3 Jan 2024 17:05:12 +0100 (CET) In-Reply-To: Received-SPF: pass client-ip=185.67.36.66; envelope-from=yantar92@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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:314504 Archived-At: Richard Stallman writes: > > ;; ALIST-VAL = '((:key1 . 1) (:key4 . 2)) > > ;; Match alist key where the key is one of a know set of keys. > > (match* (memq (alist-get key alist-val) '(:key1 :key2 :key3)) :key1) > > > >From the description of "constrained variable" construct, the above will > > (1) test if ALIST-VAL contains a record with KEY=:key1 key; (2) test if > > KEY=:key1 is one of :key1 :key2 :key3. > > What a strange example. This is connterintuitive and I could not see > at first what it would mean. But I worked it out by following the > rules. > ... > So the memq call would return t. And the pattern would match, > binding `key' to :key1. > It isn't "wrong", but I can't see the point using that strange > pattern. What purpose did you have in mind in writing it? > Is there a simpler way to do that? Let me try again to illustrate the point I wanted to make - the (match* (PRED VAL ...)) construct can look too similar to ordinary Elisp yet yielding different results that one would have to work out consciously. This similarity may lead to confusion. Consider another example: (match* (xor (not var) t) t) Unlike (match* (> (integerp bigger) 5) 10), where it is clear that #'> cannot apply to the return value of #'integerp, my example with #'xor may be tricky - one may confuse that #'xor is applied to the return value of (not var) rather than to var itself. More generally, my concern is that (match* (PRED1 (PRED2 var) ARGS) val) may be confusing for people reading the code because (PRED1 (PRED2 var) ARGS) outside match* is also a valid Elisp code, which returns a _different value_ compared to what happens inside match*. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at . Support Org development at , or support my work at