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"?
>>>>
>>>
>>>
>>
>

Reply via email to