all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Jean Louis <bugs@gnu.support>
To: help-gnu-emacs@gnu.org
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	[thread overview]
Message-ID: <YjBCGeHnQ3ozD5Ie@protected.localdomain> (raw)
In-Reply-To: <874k40iqmd.fsf_-_@zoho.eu>

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [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 <mattiase@acm.org>
>   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'

<!DOCTYPE html>
<html lang="⟦ languages_extension ⟧">
  <head>
    <title>⟦ (xml-escape wrs::title) ⟧</title>
  </head>
  <body>
    ⟦ pages_content ⟧
    ⟦ after_content ⟧
    ⟦ inquiry ⟧
  </body>
</html>

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/



  reply	other threads:[~2022-03-15  7:36 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-11 22:44 How do I pass a variable defined in a wrapping let, to a lambda? Steinar Bang
2022-03-11 23:04 ` Eric Abrahamsen
2022-03-12  4:52   ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-03-12  6:08     ` Eduardo Ochs
2022-03-12 13:33       ` Stefan Monnier
2022-03-12 18:56         ` Eduardo Ochs
2022-03-12 19:12           ` Stefan Monnier
2022-03-12 20:17             ` Eduardo Ochs
2022-03-12 20:31               ` [External] : " Drew Adams
2022-03-12 22:33                 ` Eduardo Ochs
2022-03-12 23:14                   ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-03-13 12:19                     ` Eduardo Ochs
2022-03-13 23:46                       ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-03-13  0:20                   ` Michael Heerdegen
2022-03-12 20:34           ` tomas
2022-03-12  8:53     ` Steinar Bang
2022-03-12 14:47       ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-03-12 16:59         ` Steinar Bang
2022-03-12 17:15           ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-13 18:11             ` Steinar Bang
2022-03-12 19:09           ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-03-12 20:57             ` Steinar Bang
2022-03-12  8:51   ` Steinar Bang
2022-03-12  9:34     ` Steinar Bang
2022-03-12 19:13       ` Steinar Bang
2022-03-12 14:03     ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-13 16:06       ` Eric Abrahamsen
2022-03-13 18:20         ` Steinar Bang
2022-03-11 23:48 ` Eric Abrahamsen
2022-03-12  0:43   ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-12  0:52     ` Eric Abrahamsen
2022-03-12  1:00       ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-12  0:58     ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-12  1:37   ` Michael Heerdegen
2022-03-12  2:18     ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-12  6:40       ` Jean Louis
2022-03-14 13:57         ` `let' vs `let*' (was: Re: How do I pass a variable defined in a wrapping let, to a lambda?) Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-15  7:36           ` Jean Louis [this message]
2022-03-15  8:30             ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-15 15:26           ` [External] : " Drew Adams
2022-03-15 15:41             ` tomas
2022-03-15 22:40               ` [External] : `let' vs `let*' Stefan Monnier via Users list for the GNU Emacs text editor
2022-03-16  0:25               ` [External] : `let' vs `let*' (was: Re: How do I pass a variable defined in a wrapping let, to a lambda?) Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-15 17:16             ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-14 14:51         ` How do I pass a variable defined in a wrapping let, to a lambda? Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-12  2:19     ` Eric Abrahamsen
2022-03-11 23:58 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-03-12  0:47   ` Emanuel Berg via Users list for the GNU Emacs text editor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YjBCGeHnQ3ozD5Ie@protected.localdomain \
    --to=bugs@gnu.support \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.