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: Appending lists Date: Wed, 16 Jun 2021 12:19:34 +0300 Message-ID: References: <4tl1yvylvg1fxx5eefjs9mnk.1623688568572@email.android.com> <87o8c8l32h.fsf@posteo.net> <87zgvs2bup.fsf@zoho.eu> <87y2bby1kr.fsf@zoho.eu> <20210615091834.GB24886@tuxteam.de> <87im2ewr3k.fsf@zoho.eu> <20210616072819.GB17919@tuxteam.de> 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="33969"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mutt/2.0.7+183 (3d24855) (2021-05-28) Cc: help-gnu-emacs@gnu.org To: tomas@tuxteam.de Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Wed Jun 16 11:36:24 2021 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 1ltRyB-0008Yj-OE for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 16 Jun 2021 11:36:23 +0200 Original-Received: from localhost ([::1]:34170 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ltRyA-0004Or-P2 for geh-help-gnu-emacs@m.gmane-mx.org; Wed, 16 Jun 2021 05:36:22 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:42976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ltRmU-0001a4-Ks for help-gnu-emacs@gnu.org; Wed, 16 Jun 2021 05:24:18 -0400 Original-Received: from stw1.rcdrun.com ([217.170.207.13]:57479) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ltRmR-00029F-6R for help-gnu-emacs@gnu.org; Wed, 16 Jun 2021 05:24:17 -0400 Original-Received: from localhost ([::ffff:197.157.0.23]) (AUTH: PLAIN admin, TLS: TLS1.3,256bits,ECDHE_RSA_AES_256_GCM_SHA384) by stw1.rcdrun.com with ESMTPSA id 0000000000076065.0000000060C9C33C.00001860; Wed, 16 Jun 2021 02:24:11 -0700 Mail-Followup-To: tomas@tuxteam.de, help-gnu-emacs@gnu.org Content-Disposition: inline In-Reply-To: <20210616072819.GB17919@tuxteam.de> Received-SPF: pass client-ip=217.170.207.13; envelope-from=bugs@gnu.support; helo=stw1.rcdrun.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_SORBS_WEB=1.5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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:130895 Archived-At: * tomas@tuxteam.de [2021-06-16 10:29]: > On Wed, Jun 16, 2021 at 03:11:43AM +0200, Emanuel Berg via Users list for the GNU Emacs text editor wrote: > > tomas wrote: > > > > > (setq thing (copy-sequence '(one two three four five six))) > > > (setq thang (cddr thing)) > > > > > > thang => (three four five six) > > > > > > (nreverse thing) => (six five four three two one) > > > > > > thing => (one) > > > > > > thang => (three two one) > > > ; now this is what I was after. Who the heck "changed my > > > ; variable!?" Who is General Failure and why is he reading > > > ; my disk? > > > > Well, let's see, `nreverse' has updated the data without > > setting the variables to whatever desired values they should > > take > > It can't. It's a function. > > Doing (foo x y) will *never* change "the variable x" -- unless > foo is a macro/special form. > > > so what is left is the variables reference to the first > > data item (the car), after that tho 1 doesn't have a cdr > > anymore and 3 has '(2 1), not '(4 5 6). > > You can put it this way... if you want to prevent yourself > from wrapping your head around it. > > You should draw your box-and-pointer diagrams [1]. Then, you'd > get that talking about "the 3" is dangerous talk :) > > > ? > > What happens is that thing holds a reference to the cons cell > which makes up the original list (one two...). > > Once nreverse runs over it, it just flips the pointers to point > the other way around. Now thing /still/ holds a reference to > that cons cell, but now it happens to be at the tail of the > (modified) list! Since it's a tail (now), it only "sees" one > element. What it doesn't see is that some other cons cell (one > whose car is "two" or thereabout) is pointing at it. > > No, I won't draw the box-and-pointer diagrams for you. It's > something that, like riding a bicycle, is fun when you do it > yourself :-) What is it doing in background, or underground, does not really matter for user, what matters is that `x' in following example is changed: > Doing (foo x y) will *never* change "the variable x" -- unless > foo is a macro/special form. Well nconc is apparently function: (setq list '(A B C)) ⇒ (A B C) list ⇒ (A B C) (nconc list '(1 2 3)) ⇒ (A B C 1 2 3) list ⇒ (A B C 1 2 3) What matters is that variable `list' is changed for user. As user need not know the C or underlying functions or whatever you explained. You said vairable did not change, maybe it did not change somewhere underground, but then it should be better explained in the manner that first: - acknowledges that value of variable did visibly change as that is what we can see, and empirically sense and agree upon; - then to explain how maybe in the underground C or memory structures maybe variable did not change; which is probably not useful for Lisp high-level programma and mentioning the usefulness or lack of it is also good; -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/