Thank you

On 11 February 2017 at 11:51, Joh-Tob Schäg <johtob...@gmail.com> wrote:

> You can also explicitly change the car or cdr of a list cell.
> If you do a little diging in the docs you might find the functions.
> Am 11.02.2017 12:45 schrieb "dean" <deangwillia...@gmail.com>:
>
> > >Does that explanation make sense?
> >
> > Yes it does
> >
> > >You can either destructivly change the car of a cell in the list or
> write
> > your own pop which keeps the same >cell at the head of the list (by
> > reassigning car parts appropiatly).
> >
> > Thank you...this is the only way I know about at the moment that lets me
> > destroy the car and replace it with something new...as you say though it
> > creates a whole new AND GLOBAL list because of setq.
> >   (setq L (insert '1 (remove '1 L) 2))
> >
> > Irrespective...thank you for your further advice.
> >
> >
> >
> >
> > On 11 February 2017 at 10:51, Joh-Tob Schäg <johtob...@gmail.com> wrote:
> >
> > > List operations in Picolisp tend to be non destructive and constructive
> > > (they allocate new cells to get what you want) leaving old ones to be
> > > collected by gc.
> > > Am 11.02.2017 11:48 schrieb "Joh-Tob Schäg" <johtob...@gmail.com>:
> > >
> > >> I understand your problem now.
> > >>
> > >> You have think about cells in this case.
> > >>
> > >> When you inc a 'symbol the value part of the symbol-cell is changed.
> > >> [prop|val] represents a symbol in this case.
> > >> (inc '[NIL|5]) is [NIL|6]
> > >> The Symbol was changed destructivly. All earlier refernces to this
> cell
> > >> now evaluate to 6. That is because a cell evaluates to its value.
> > >>
> > >> If you push 88 on to a list. You do not get back the original list
> > >> changed but a new list which has a a cell with 88 in the beginning and
> > >> pointer to the old list in the cdr.
> > >> [1|pointer to 2nd cell] [2| pointer to 2nd cell ] [3|Nil] [Nil|Nil]
> > >> You save this list in to a symbol which now has the pointer to the
> first
> > >> element in it value slot.
> > >>
> > >> If you push 88 on to this list it looks like this:
> > >> [1|pointer to 2nd cell] [2| pointer to 2nd cell ] [3|Nil] [88|pointer
> to
> > >> first cell]
> > >> However your symbol L does not notice this change because it is still
> > >> pointing to the first cell.
> > >> To make it point to the head of the new list you need to setq the
> value
> > >> of L to the new head of the list.
> > >>
> > >> Does that explanation make sense?
> > >>
> > >> You can either destructivly change the car of a cell in the list or
> > write
> > >> your own pop which keeps the same cell at the head of the list (by
> > >> reassigning car parts appropiatly).
> > >> Am 11.02.2017 11:29 schrieb "dean" <deangwillia...@gmail.com>:
> > >>
> > >>> Hi Joh-tob & Joe
> > >>> With setq L.....(0 0 0) gets changed to (2 0 0) i.e. the replace is
> > done
> > >>> by index not matching value
> > >>> With let L...(0 0 0) stays at (0 0 0)
> > >>> I'd wanted the former in conjunction with let.
> > >>> Thank you for the suggestion re need...and the explanation re let.
> > >>> I can do this with setq but was just wondering if there was a way
> > around
> > >>> "setting" let'd values more than once...like you can with let'd
> > >>> atoms...using inc and dec.
> > >>> I don't think you can but didn't think you could with atoms until inc
> > >>> and dec came back as an answer on this forum...hence this question :)
>

Reply via email to