KEdit again & learning REXX (2024-02-15)

There is something wholesome in graycat’s comments on HN - especially ones where KEdit is involved!

These posts have inspired me to learn REXX / KEXX. Turns out my Slackware machine has Regina REXX.

Here is how to get the permutations of A B C D:

/* REXX */
CALL Permute "ABCD"
EXIT

Permute: PROCEDURE
PARSE ARG str
CALL PermuteHelper str, 1, LENGTH(str)
RETURN

PermuteHelper: PROCEDURE
PARSE ARG str, l, r
IF l = r THEN
    SAY str
ELSE
    DO i = l TO r
        str = Swap(str, l, i)
        CALL PermuteHelper str, l+1, r
        str = Swap(str, i, l) /* backtrack */
    END
RETURN

Swap: PROCEDURE
PARSE ARG str, i, j
IF i = j THEN RETURN str
a = SUBSTR(str, i, 1)
b = SUBSTR(str, j, 1)
str = OVERLAY(b, str, i)
str = OVERLAY(a, str, j)
RETURN str

Fun! How could we run this on a real mainframe?