On 2017-05-03, at 14:57, Michael Harding wrote: > > ... Or in your example you could have kept going beyond the 4th > argument but what's the point, you know they aren't specified. > It was just an astonishment (admittedly minor) that for: X = F( , 'Z' ) in F, "SAY ARG() ARG( ARG(), 'E' )" prints "2 1", but for: X = F( 'A', ) in F, "SAY ARG() ARG( ARG(), 'E' )" prints "1 1" where I'd expect "2 0". (I just need to read the manual very carefully.)
On 2017-05-03, at 14:48, Mark Boonie wrote: > Small quibble -- Rexx does distinguish between a null string and an > omitted string, to some extent, using the ARG(n, 'E') or ARG(n, 'O') forms > of the ARG() function. For example, Arg(4, 'E') returns 0 if the 4th > argument was omitted, but it returns 1 if it was specified as a null > string. For parsing, of course, an omitted parameter is treated the same > as a null string. > One might code, if it matters: IF ARG( n, 'E' ) THEN Arg.n = ARG( n ) ELSE DROP Arg.n > The ARG() function with no parameters returns the number of the last > explicitly specified argument (even if it was a null string). As a > result, there is no way to tell how many extra commas with omitted > parameters were specified. > Yup. And one can tell whether a subroutine returns a result with DROP RESULT CALL SUBR if SYMBOL( 'RESULT' )=='LIT' THEN DROP X ELSE X = RESULT (assuming that SUBR doesn't have an internal call that sets RESULT and EXPOSEs it.) -- gil