I am terribly sorry
I was server version bug in the package
This bug was corrected long ago in home version
0.8 in the process of approving also
reads 'normal()' description correctly
I discard the message below
Oleh

27 жовтня 2018, 11:15:58, від oleg_komashko@ukr.net:

The script below produces
Warning: 'mfx' shadows a function of the same name


I wanted
Warning: 'mfx' shadows a lag creation for series of the same name
rename it if you need to use name(lag), or name(lag1 to lag2)

Renaming series is much simpler.
Instead of unwanted behavior of lags for single variable
we have broken packageam

<hansl>
nulldata 100


series mfx = normal()
series y = normal()
series x = normal()

include a_eff.gfn

ols y 0 x
mod = $model

mfx(&mod)

series z = mfx
delete mfx

<hansl>

Oleh













26 жовтня 2018, 21:36:16, від "Allin Cottrell" <cottrell@wfu.edu>:

On Fri, 26 Oct 2018, Sven Schreiber wrote:

> Am 26.10.2018 um 14:46 schrieb Allin Cottrell:
>> On Fri, 26 Oct 2018, Sven Schreiber wrote:
>>> 
>>> I don't mean to imply any consequences (except perhaps warnings and hints 
>>> to package writers in the docs), but for completeness it should perhaps be 
>>> noted that this is not entirely true: If you receive a list argument and 
>>> pick out certain series their names come from the outside.
>> 
>> But they cannot be referenced by their outer names within the function, you 
>> have to use the List.$i syntax. Here's an example:
>> 
>> <hansl>
>> function void argnames (list L)
>>   loop foreach i L
>>     series x$i = L.$i(-1)
>>     print x$i
>>   endloop
>> end function
>> 
>> open denmark
>> rename LRY sin # try to cause trouble!
>> list X = LRM sin
>> argnames(X)
>> </hansl>
>> 
>> Inside argnames() we're able to take a lag of the series known as "sin" in 
>> main without a problem.
> Also good to know, but what I meant is something like this:
>
> <hansl>
> clear
> function list LRM(int i)
>   print "just to have a function with this name"
>   list L1 = null
>   return L1
> end function
>
> function list exlag(list L)
>   s = varnames(L)[1]
>   series @s = L[1]
>   list out = @s(-1)
>   return out
> end function
>
> open denmark
> list Lo = exlag(LRM)
> list Lo print
> </hansl>
>
> Again, I'm not saying these artificial cases have to be caught, 
> just adding this example for completeness.

OK. But I'd say that what now happens with your example in git is 
correct. Within exlag(), the user-function LRM() is masked by the 
series-name LRM; the function is ignored and the first lag of LRM is 
created.

If that's not what "you" (hypothetical function-writer) wanted, then 
don't use varnames() on series you got via a list; you can't be sure 
that these names won't collide with other stuff -- not only 
functions, but variables of type other than series that you have 
defined. That's the point of the "List.$i" syntax.

I guess if we wanted to get very nanny-ish about this we could 
figure out a way to make varnames() fail on series whose names 
you're not supposed to have access to inside a function.

Allin
_______________________________________________
Gretl-devel mailing list
Gretl-devel@lists.wfu.edu
http://lists.wfu.edu/mailman/listinfo/gretl-devel
_______________________________________________
Gretl-devel mailing list
Gretl-devel@lists.wfu.edu
http://lists.wfu.edu/mailman/listinfo/gretl-devel