On Fri, 9 Nov 2012, Riccardo (Jack) Lucchetti wrote:
On Fri, 9 Nov 2012, Allin Cottrell wrote:
> On Fri, 9 Nov 2012, Sven Schreiber wrote:
>
>> Am 09.11.2012 18:17, schrieb Allin Cottrell:
>>> On Fri, 9 Nov 2012, Sven Schreiber wrote:
>>>>
>>>> I'm not saying I need it, but it isn't obvious to me why it is
less
>>>> useful in principle than for example 'isstring()'. Instead it
seems to
>>>> be a natural complement to the other 'is...()' functions,
doesn't it?
>>>
>>> Maybe I was too glib. But actually, it seems to me that all we
>>> really need is isnull() --
>>
>> [followed by more detail]
>>
>> Hm, not sure, but what about the case of analyzing the components of
>> bundles in a script? Maybe the bundle itself is a function argument, and
>> then the function needs to check the sanity of the structure of the
>> bundle that was passed in?
>
> Point taken. I need to think about that. If it's valid I guess
> we should add ismatrix and isbundle? Or, perhaps better, roll
> these distinct functions into something we might call typeof?
>
> if typeof(whatever) != "scalar"
> ...
> endif
I like this. Moreover: sometimes we run into trouble because automatic
re-casting of a scalar as a 1x1 matrix doesn't work. For example:
<hansl>
scalar c = 5
matrix x = invpd(c)
</hansl>
now works, but it wouldn't not so long ago (invpd would complain its argument
should have been a matrix). Of course the above not working was a bug, and
was killed as such, but sometimes it's nice to have a workaround while the
bug is still there.
The only think I'd change from Allin's proposal is to introduce an
integer-based coding system, such as 1=scalar, 2=series etc and have typeof()
return a scalar. For performance reasons, the less we use strings, the
better.
Good point.
I've sometimes wondered if it would be worth trying to expose
some sort of "enum" system in gretl -- e.g. in this context
NONE = 0, SCALAR = 1, SERIES = 2 and so on. It would obviously
be more intuitive to be able to do
if typeof(whatever) == SCALAR
where SCALAR codes for an integer. But it means "invading" the
user's available namespace, plus more internal string look-up,
so maybe it's not worth the trouble outside of a compiled
language.
Allin