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 :)