Entries in implicit function arguments (1)

What are the implicit, default argument names to a function?

x, y and z. This applies both to named and anonymous functions:

q)f: {x + y + z}
q)f[1; 2; 3]
6
q){x + y + z}[1; 2; 3]
6
q)

If z appears in the definition of an argument-less function, then the function takes 3 arguments. It is not necessary for x or y to appear:

q)f: {z}
q)f[3]
{z}[3]
q)f[3; 4; 5]
5
q)

Similarly, if y appears but z does not appear, then the function takes 2 arguments. What may surprise you is that, if none of x, y, or z appear, then the function takes a single argument called x:

q)f: {42}
q)f[]
42
q)value f
0xa00001
,`x
`symbol$()
,`
42
"{42}"
q)

This is only of practical import if you want to test a function for how many arguments it takes. If you really want to define a function taking no arguments, you might try to use an empty parameter list:

q)f: {[] 47}
q)f[]
42
q)value f
0xa00001
,`
`symbol$()
,`
47
"{[] 47}"
q)

While we've succeeded only in defining a function with a single, unnamed parameter, all is not lost. If you follow a convention of always declaring nullary functions in this way, that's enough to test at runtime how many arguments a function requires.