This works too but I really want to remove setq from the middle of doit : (de doit () (let L (0 0 0) (setq L (insert '1 (remove '1 L) 2)) (prinl "L is " L) ) ) -> doit : (doit) L is 200 -> (2 0 0)
On 11 February 2017 at 10:29, dean <deangwillia...@gmail.com> wrote: > Here's the desired behaviour using the above code > > : (setq L (0 0 0)) > -> (0 0 0) > : (de doit () > #(let L (0 0 0) > (setq L (insert '1 (remove '1 L) 2)) > (prinl "L is " L) > #) > ) > -> doit > : (doit) > L is 200 > -> (2 0 0) > > I was after (2 0 0) using let L i.e. the two lines commented out which > would replace the top setq... line > but no go and probably quite rightly. It just that (let A 3......(inc > 'A)...allows A to have it's value altered but there doesn't seem to be a > way to bring inc/dec to bear on a list element in the same very influential > way. > > On 11 February 2017 at 10:23, dean <deangwillia...@gmail.com> wrote: > >> 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 :). >> Thank you for your advice and best regards >> Dean >> >> >> >> On 11 February 2017 at 02:07, Joe Bogner <joebog...@gmail.com> wrote: >> >>> dean, is this what you are describing? >>> >>> (let L (list 1 2 3) >>> (setq L (append L (4))) >>> (printsp L) ) >>> >>> >>> (1 2 3 4) >>> >>> >>> The key to this is understanding how let works. It restores the prior >>> value after execution. See http://software-lab.de/doc/refL.html#let >>> >>> Defines local variables. The value of the symbol sym - or the values of >>> the symbols sym in the list of the second form - ***are saved** and the >>> symbols are bound to the evaluated any arguments. The 64-bit version also >>> accepts lst arguments in the second form; they may consist only of symbols >>> and sublists, and match the any argument (destructuring bind). prg is >>> executed, then the symbols ***are restored to their original values***. >>> >>> >>> >>> On Fri, Feb 10, 2017 at 3:22 PM, dean <deangwillia...@gmail.com> wrote: >>> >>>> Hi >>>> I've seen that I can alter local/let'd atoms? via inc/dec i.e. (inc >>>> 'Some_atom) >>>> which gets me a long way... >>>> ...but what about list elements? >>>> >>>> >>>> (setq L (0 0 0)) >>>> (de doit () >>>> #(let L (0 0 0) >>>> (setq L (insert '1 (remove '1 L) 2)) >>>> (prinl "L is " L) >>>> #) >>>> ) >>>> >>>> When I "setq" L this works but can I do it (somehow) when L is created >>>> with "let"? >>>> >>> >>> >> >