and use a local solution but don't think that I can On 11 February 2017 at 10:38, dean <[email protected]> wrote:
> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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"? >>>>> >>>> >>>> >>> >> >
