Am 15.10.2018 um 15:25 schrieb Riccardo
(Jack) Lucchetti:
the fact that we don't have named arguments for functions like R
and Python have is sometimes a little inconvenient.
Thanks again for the initiative. Indeed it would be a major step for
gretl / hansl if something like keyword args (the Python jargon for
that) were possible.
So I thought one could pass a string argument to a function with
options of the kind "a = _something_", where _something_ is a
scalar or a string, or better still, a sequence of these
statements, separated by semicolons.
However, I'm afraid I don't like this string-wrapping approach. It
obfuscates things because the true nature of the arguments is not
visible to gretl anymore and the burden of checking and so forth is
shifted to the hansl user (both the package author and the end
user).
or
perhaps into libgretl.
For such a fundamental thing I believe core gretl is the only way
really.
The question is how to achieve this without too much problems for
gretl (and also for Allin, hehe). So I'm thinking of syntactic
constructs that would be unambiguous for the parser.
One wild idea would be a pair of square brackets to indicate that a
keyword is given. Example:
<hansl-future>
function void myfunc(int a)
print a
end function
# new optional call syntax:
myfunc([a = 5])
</hansl-future>
The idea is that a square bracket after an opening round bracket or
a comma would be illegal everywhere else (right?), so cannot be
mistaken. Then inside those square brackets it would be clear that
it's not really an assignment, but a named arg.
(One pre-requisite for this would be to finally ban the use of "="
as standing in for "==", otherwise it's next to impossible I guess.)
On the other hand, maybe the "=" itself would already be enough to
signal to the parser that it's a name:
myfunc(a=5)
This of course is basically like it's done in Python (and other
languages).
Or maybe with an exclamation mark? As in:
myfunc(a!5)
Cheers,
sven