[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Appending lists
From: |
tomas |
Subject: |
Re: Appending lists |
Date: |
Wed, 16 Jun 2021 09:28:19 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
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 :-)
Cheers
[1] https://en.wikipedia.org/wiki/Lisp_(programming_language)#Conses_and_lists
- t
signature.asc
Description: Digital signature
- RE: [External] : Appending lists, (continued)
- RE: [External] : Appending lists, Drew Adams, 2021/06/14
- Re: Appending lists, Pierpaolo Bernardi, 2021/06/14
- Re: Appending lists, Pierpaolo Bernardi, 2021/06/14
- Appending lists, henri-biard, 2021/06/14
- Re: Appending lists, Alexandr Vityazev, 2021/06/14
- Re: Appending lists, Emanuel Berg, 2021/06/14
- Re: Appending lists, Emanuel Berg, 2021/06/15
- Re: Appending lists, tomas, 2021/06/15
- Re: Appending lists, Emanuel Berg, 2021/06/15
- Re: Appending lists,
tomas <=
- Re: Appending lists, Jean Louis, 2021/06/16
- Re: Appending lists, tomas, 2021/06/16
- Re: Appending lists, Jean Louis, 2021/06/16
- Re: Appending lists, Emanuel Berg, 2021/06/16
- Using Emacs for business, Jean Louis, 2021/06/16
- Re: Using Emacs for business, Emanuel Berg, 2021/06/16
- Re: Using Emacs for business, Jean Louis, 2021/06/16
- Re: Using Emacs for business, Emanuel Berg, 2021/06/16
- Re: Using Emacs for business, Jean Louis, 2021/06/17
- Re: Appending lists, Jean Louis, 2021/06/16