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