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

**URL:** <https://pluralist.net/t/kedit-again-learning-rexx-2024-02-15/78>\
**Category:** breadcrumbs\
**Created:** [February 16, 2024, 5:19am UTC](https://pluralist.net/t/kedit-again-learning-rexx-2024-02-15/78 "2024-02-16T05:19:39Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![delyan](https://pluralist.net/user_avatar/pluralist.net/delyan/32/245_2.png) [@delyan](https://pluralist.net/u/delyan)\
**Post date:** [February 16, 2024, 5:19am UTC](https://pluralist.net/t/kedit-again-learning-rexx-2024-02-15/78/1 "2024-02-16T05:19:39Z")

</div>

There is something wholesome in [graycat’s comments on HN](https://hn.algolia.com/?dateRange=all&page=0&prefix=false&query=KEdit&sort=byDate&type=comment) - 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
/* 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?
