From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 12382 invoked from network); 7 Sep 2021 20:44:31 -0000 Received: from mx1.math.uh.edu (129.7.128.32) by inbox.vuxu.org with ESMTPUTF8; 7 Sep 2021 20:44:31 -0000 Received: from lists1.math.uh.edu ([129.7.128.208]) by mx1.math.uh.edu with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mNhxF-00GuLb-T8 for ml@inbox.vuxu.org; Tue, 07 Sep 2021 15:44:29 -0500 Received: from localhost ([127.0.0.1] helo=lists.math.uh.edu) by lists1.math.uh.edu with smtp (Exim 4.94) (envelope-from ) id 1mNhxF-002Yob-9S for ml@inbox.vuxu.org; Tue, 07 Sep 2021 15:44:29 -0500 Received: from mx1.math.uh.edu ([129.7.128.32]) by lists1.math.uh.edu with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94) (envelope-from ) id 1mNhxE-002YoV-BK for ding@lists.math.uh.edu; Tue, 07 Sep 2021 15:44:28 -0500 Received: from quimby.gnus.org ([95.216.78.240]) by mx1.math.uh.edu with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mNhxC-00GuLJ-46 for ding@lists.math.uh.edu; Tue, 07 Sep 2021 15:44:27 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:To:From:Sender:Reply-To:Cc:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=7Sq9rUC8D1aHBdhx70qBJieikyOI/whO2YMhM2hqTVU=; b=d+cCoC0VYvvfFOIK1+ihHJ9hgV sUEQWBLvu7rSoDNIawIBz9M5OTlY+9emXz4d3+8GSXqDQkNXt6ApVeM/jdCRJKwJYl187fYT00Zbv NsMi4WoAt83pZ8XShIkec3kVTSOpv6l3Ei7AkvYjdgMa1V7Sj3wl3t2iq6MAOTrLHm6k=; Received: from mail.ericabrahamsen.net ([52.70.2.18]) by quimby.gnus.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mNhx5-0001Xg-J8 for ding@gnus.org; Tue, 07 Sep 2021 22:44:22 +0200 Received: from localhost (c-71-197-232-156.hsd1.wa.comcast.net [71.197.232.156]) (Authenticated sender: eric@ericabrahamsen.net) by mail.ericabrahamsen.net (Postfix) with ESMTPSA id 2431AFA04B for ; Tue, 7 Sep 2021 20:44:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericabrahamsen.net; s=mail; t=1631047457; bh=7Sq9rUC8D1aHBdhx70qBJieikyOI/whO2YMhM2hqTVU=; h=From:To:Subject:References:Date:In-Reply-To:From; b=ElIQhmottggq1G40K5UiwsundhAcw4FiMM9cfTEyBvDeBgJfa24a5+qi+IwSV0Do4 2BbOQI/1YDMDoFlL8jTbrBMJgs7uPcGs6w6NdHjBRtrZLLV2kx3BQNQ02vfWFJE0j+ 3QfacP11SjWw9xerp2DmeGWRCErhoIkoqfaBsqV0= From: Eric Abrahamsen To: ding@gnus.org Subject: Re: for a given emacs session: insert a subject with an increasing counter References: <87v93maplq.fsf@mat.ucm.es> <87h7f629rj.fsf@ucl.ac.uk> <87o89e85vg.fsf@mat.ucm.es> <87k0k2aynw.fsf@tullinup.koldfront.dk> <8735qpd3jj.fsf@mat.ucm.es> <87tuj5j6f9.fsf@gmail.com> <87wnnw747v.fsf@mat.ucm.es> <87ilzcnwc3.fsf@zoho.eu> <87fsuggqes.fsf@ericabrahamsen.net> <87zgsour1m.fsf@zoho.eu> <87fsuguozt.fsf@zoho.eu> Date: Tue, 07 Sep 2021 13:44:15 -0700 In-Reply-To: <87fsuguozt.fsf@zoho.eu> (Emanuel Berg's message of "Tue, 07 Sep 2021 22:09:26 +0200") Message-ID: <87bl54glpc.fsf@ericabrahamsen.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain List-ID: Precedence: bulk Emanuel Berg writes: >>> That's called a "closure", because the function "closes >>> over" the let-bound symbol. Once evaluated, _only_ the >>> function body has access to that symbol: it can treat it >>> like a globally-defined variable, but no one else can see >>> it. When lexical-binding is non-nil, you're always making >>> closures: >>> >>> (setq lexical-binding t) >>> (lambda (arg) (message "%S" arg)) --> >>> (closure (t) (arg) (message "%S" arg)) >>> >>> The (t) is where the closed-over symbols and their current >>> values would be stored, if there were any. It's sort of >>> like the function's own private let-form. >> >> But ... isn't that what you get with lexical/static `let' >> _in_ the function? > > Ah, now I understand what you mean. With `let' inside, the > variable will reset, so it cannot count, but with `let' > outside (the closure), as you say "it can treat it like > a globally-defined variable". That's right. > "globally-defined", very good! > > Oh, no! > > I didn't know of this (never seen it). I have used global > variables to hold the "state" (be a memory between function > calls) but I've also done more involved solutions like > properties and even self-modifying code :O > > And all the while, it was this easy ... TBH, I've never actually used a closure in anger, probably just because it doesn't occur to me. I'll bet if I went back and looked over the code I've written in the past I could find some situations where I could have used them, but... *shrug*