RosettaCodeData/Task/Metaprogramming/REXX/metaprogramming.rexx

54 lines
4.3 KiB
Rexx
Raw Permalink Normal View History

2013-04-10 21:29:02 -07:00
/*┌───────────────────────────────────────────────────────────────────┐
The REXX language doesn't allow for the changing or overriding of
syntax per se, but any of the built-in-functions (BIFs) can be
overridden by just specifying your own.
To use the REXX's version of a built-in-function, you simply just
enclose the BIF in quotation marks (and uppercase the name).
The intent is two-fold: the REXX language doesn't have any
reserved words, nor reserved BIFs (Built-In-Functions).
So, if you don't know that VERIFY is a BIF, you can just code
a subroutine (or function) with that name (or any name), and not
worry about your subroutine being pre-empted.
Second: if you're not satisfied how a BIF works, you can code
your own. This also allows you to front-end a BIF for debugging
or modifying the BIF's behavior.
*/
yyy='123456789abcdefghi'
rrr = substr(yyy,5) /*returns efghi */
mmm = 'SUBSTR'(yyy,5) /*returns 56789abcdefgji */
sss = "SUBSTR"(yyy,5) /* (same as above) */
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────SUBSTR subroutine───────────────────*/
substr: return right(arg(1),arg(2))
/*┌───────────────────────────────────────────────────────────────────┐
Also, some REXX interpreters treat whitespace(s) as blanks when
performing comparisons. Some of the whitespace characters are:
NL (newLine)
FF (formFeed)
VT (vertical tab)
HT (horizontal tab or TAB)
LF (lineFeed)
CR (carriage return)
EOF (end-of-file)
and/or others.
Note that some of the above are ASCII or EBCDIC specific.
Some REXX interpreters use the OPTIONS statement to force
REXX to only treat blanks as spaces.
(Both the verb and option may be in lower/upper/mixed case.)
REXX interpreters which don't recognize any option won't treat
the (below) statement as an error.
*/
options strict_white_space_comparisons /*can be in lower/upper/mixed.*/