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