From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jean Louis Newsgroups: gmane.emacs.help Subject: Re: `let' vs `let*' (was: Re: How do I pass a variable defined in a wrapping let, to a lambda?) Date: Tue, 15 Mar 2022 10:36:57 +0300 Message-ID: References: <87k0d03vaw.fsf@ericabrahamsen.net> <8735joc5of.fsf@web.de> <87r177rjzn.fsf@zoho.eu> <874k40iqmd.fsf_-_@zoho.eu> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="8018"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mutt/2.2.0 (2022-02-12) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Tue Mar 15 08:49:19 2022 Return-path: Envelope-to: geh-help-gnu-emacs@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 1nU1vj-0001rr-SR for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 15 Mar 2022 08:49:19 +0100 Original-Received: from localhost ([::1]:57114 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nU1vi-0003vL-Kt for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 15 Mar 2022 03:49:18 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:57058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nU1vI-0003uy-T8 for help-gnu-emacs@gnu.org; Tue, 15 Mar 2022 03:48:52 -0400 Original-Received: from stw1.rcdrun.com ([217.170.207.13]:57721) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nU1vH-0001jh-0M for help-gnu-emacs@gnu.org; Tue, 15 Mar 2022 03:48:52 -0400 Original-Received: from localhost ([::ffff:197.239.5.202]) (AUTH: PLAIN admin, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384) by stw1.rcdrun.com with ESMTPSA id 000000000005BF04.00000000623044E0.00002D79; Tue, 15 Mar 2022 00:48:48 -0700 Mail-Followup-To: help-gnu-emacs@gnu.org Content-Disposition: inline In-Reply-To: <874k40iqmd.fsf_-_@zoho.eu> Received-SPF: pass client-ip=217.170.207.13; envelope-from=bugs@gnu.support; helo=stw1.rcdrun.com X-Spam_score_int: 7 X-Spam_score: 0.7 X-Spam_bar: / X-Spam_report: (0.7 / 5.0 requ) BAYES_00=-1.9, CONTENT_AFTER_HTML=2.497, RCVD_IN_SBL=0.141, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:136570 Archived-At: * Emanuel Berg via Users list for the GNU Emacs text editor [2022-03-15 06:16]: > Jean Louis wrote: > > > New `dlet' is this and it broke my programs because somebody > > removed `let*' inside. I don't think that person who changed > > it every used `dlet' in their own programs. Reason is > > semantics, "dlet" uses "let*" so they changed it, but did > > not provide "dlet*" (though is easy to adapt it). > > Okay, well, I'm not a `dlet' user myself since dynamic/special > scope isn't in my programmer's DNA ... > > As for `let' vs `let*' in theory `let' is parallel and `let*' > sequential but in practice `let*' allows references back to > its own bindings, so it is recursive `let' if you will, and > `let' isn't ... In the `dlet' discussion, well... I see it so, dlet is creating dynamically bound variables, and thus they should be available to all variables inside of `dlet" (dlet ((first-var 1) (second-var first-var)) second-var) second-var should be equal to first var, but developer Mattias Engdegård, he changed it for the reason that dlet is not dlet* > commit b72f88518b89560accf740a4548368863e6238e0 > Author: Mattias Engdegård > Date: Sun Aug 1 17:05:48 2021 +0200 > * Make dlet work like let, not let* > * Change `dlet` so that it has binding semantics like `let` because that > * is what a user would expect and it allows a corresponding `dlet*` to > be added later should the need arise. Fortunately the change has no > effect where it is currently used. That is what user would expect. But that is not what I as user expect. And nobody of other users complained on that, though the definition of dlet is changed. dlet is described with: Like ‘let’ but using dynamic scoping. (dlet ((first-var 1) ;; if this is now in dynamic scoping, then: (second-var first-var)) ;; it should be visible ;; also in this second line second-var) ;; but it is not visible Common Emacs Lisp users will get all variables from files. That is what you do and majority of other people. In my use case variables come from database. There are scripts in the database that wish to access some information. For example there may be a template in the database asking for the title of the page. In this below example it is `wrs::title' ⟦ (xml-escape wrs::title) ⟧ ⟦ pages_content ⟧ ⟦ after_content ⟧ ⟦ inquiry ⟧ Unless the variable wrs::title is dynamically bound it would not be seen for further interpolation inside of the template. That is where `dlet' becomes useful from within lexically scoped programs. Though I use it with reverted modification as `rcd-dlet' so that all variables defined within `rcd-dlet' become globally visible to other variables in the same function. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/