From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.help Subject: RE: RE: Understanding the "let" construct and the setting of variables Date: Thu, 17 Dec 2020 13:57:12 -0800 (PST) Message-ID: <76bfdd53-e68c-4572-9a41-4f5c693cfb4b@default> References: <87zh2d1byp.fsf@fastmail.fm> <87tusk2754.fsf@fastmail.fm> <3b1a7936-913a-4736-9b12-0d3e04333c74@default> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11684"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Joost Kremers , help-gnu-emacs@gnu.org To: steve-humphreys@gmx.com Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Thu Dec 17 22:58:20 2020 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 1kq1Hw-0002xo-6J for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 17 Dec 2020 22:58:20 +0100 Original-Received: from localhost ([::1]:35764 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kq1Hv-00056f-7I for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 17 Dec 2020 16:58:19 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kq1H6-000555-NF for help-gnu-emacs@gnu.org; Thu, 17 Dec 2020 16:57:29 -0500 Original-Received: from aserp2120.oracle.com ([141.146.126.78]:56720) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kq1H1-0000vr-2T for help-gnu-emacs@gnu.org; Thu, 17 Dec 2020 16:57:26 -0500 Original-Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0BHLrm9U024749; Thu, 17 Dec 2020 21:57:16 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=HUvquafakp3JA0Nz9G/8vHffUgi6X6tAFx0qnRu8XOQ=; b=vzAlSXActOtVss4PsmarkR/aHaR+PTGsyh0i8J5Mdcgv8sqWbHQwJQxh8Ds3oKttUwZg xlaYkh2JjMtVdm0V0hQAKMwRAsdBWNIJTaIzoCVyezlZhAkCL5hHJswUmgpZVJ2GXUBv XdJ5d1R2vkp3BAiMhRty4wfqPzqjPultFDG0LAU5L7GR/JfJORthhSzZHZiamzMz5vb5 3QM8fKmc0LQH4/PWWMfdAC+uMgUOKoxiIvq4XJ+hp6t8X/gW5h111QFec0tdzyT93Pf+ 4tMdjSL7206eyeaN6SVbenjJ9XW0Qo68clD4AuDZKtj6ERxTvcJCZFA9LZnhNAlJxO0p 0A== Original-Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by aserp2120.oracle.com with ESMTP id 35cntmfnbr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 17 Dec 2020 21:57:16 +0000 Original-Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 0BHLuHfp148693; Thu, 17 Dec 2020 21:57:15 GMT Original-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3030.oracle.com with ESMTP id 35d7t10xqv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 17 Dec 2020 21:57:15 +0000 Original-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 0BHLvDIQ020159; Thu, 17 Dec 2020 21:57:14 GMT In-Reply-To: X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.5071.0 (x86)] X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9838 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxlogscore=938 spamscore=0 mlxscore=0 suspectscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012170143 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9838 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 mlxscore=0 lowpriorityscore=0 spamscore=0 adultscore=0 malwarescore=0 suspectscore=0 mlxlogscore=953 impostorscore=0 priorityscore=1501 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012170143 Received-SPF: pass client-ip=141.146.126.78; envelope-from=drew.adams@oracle.com; helo=aserp2120.oracle.com 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, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 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:126474 Archived-At: > > What is correct to say is that the let _binding_ of the > > variable no longer exists, not that the variable itself > > no longer exists. > > > > In the case of a dynamic variable, it continues to exist. > > And its binding from the let continues to exist as long > > as the code in the let body is executing. > > > > [Yes, some people will consider a let binding to create > > a _new_ variable. In that sense you can say that that > > var ceases to exist. But IMO that isn't as clear to > > users as it is to distinguish the binding from the var. > > And even if you use the words that way, you still need > > to point out that the var continues to exist as long as > > the code within the let body is executing (when the > > binding is for a dynamic var).] >=20 > I would thing the variable has to be made somewhere. What's your point? Yes, you can think of either a variable being created or a binding being created. In the case of a local variable the two amount to different ways of talking about the same thing. But in the case of a dynamic variable, it's clearer, and more common, to talk about a new binding to the same var being created, rather than a new variable being created. In particular, a dynamic variable (its latest binding) can be accessed outside the lexical scope of the let. It's natural to think in terms of this in terms of the same var being bound, rebound, etc. in different ways over time. > In fact people talk about "unboundp". An unbound variable is a free variable with respect to some context. If a variable has no binding in any context then it's free/unbound at the top level. You can use `let' to bind a variable (dynamically or lexically). A function parameter gets bound as a local variable when the function is called. And `defvar' and `setq' can assign a value to a variable - that assignment is also a binding, of sorts.