Hi Alex,

Thanks for pointing out why I should use ‘use’ on those symbols. I have now 
updated my project.

/Jon

> On 7. Feb, 2017, at 17:36, Alexander Burger <a...@software-lab.de> wrote:
> 
> Hi Jon,
> 
>> I have noticed that frequent use of ‘setq’ has been questioned recently on
>> this list. In my convConcat.l script there are quite a few setq’s that 
>> possibly
>> could have been coded in a better way. Let me know if you spot some obvious
>> candidates.
> 
> Basically there is nothing bad about 'setq'.
> 
> It is just problematic if you use it to modify not-locally-bound symbols (the
> term is "free variables") without them being clearly meant as global variables
> (by convention with a leading '*'), or from functions meant as local to other
> functions (by convention with a leading '_').
> 
> 'lint' should complain in such cases.
> 
> In case of convConcat.l, you set some globals in the beginning, and local
> variables like 'Head', 'Tail', 'Val' and 'C'. Looks all good.
> 
> 
> If I lint the code, I just get a single warning
> 
>   : (lintAll)
>   -> ((convLink (bnd @Props @After @X @Before)))
> 
> which means "please bind these four symbols" in function 'convLink'.
> 
> This is because 'match' also sets values. You can fix this by calling 'use' on
> them:
> 
>   (de convLink (F Chunk)
>      # First checking special case <a name=">foo">
>      (use (@Props @After @X @Before)
>         (if (match '(@Before < a " " n a m e = "\"" > @X "\"" > @After) Chunk)
> 
> ♪♫ Alex
> -- 

Reply via email to