ahoy matey

stevan apter — 2004-10-23 22:16:13

easier to show the problem than explain it:

a list which contains nested occurrences of mated elements.
in this case, the list is a string and the mated elements
are '( and '):

"(abc(def)(ghi)(jk(lmn)(op)))rstuvw"

a list of the mates:

"()"

split the list into a pair of lists: the first of the pair
is everything up to the first right-mate which balances, and
the second is everything from there on:

"(abc(def)(ghi)(jk(lmn)(op)))rstuvw" "()" mated
["(abc(def)(ghi)(jk(lmn)(op)))" "rstuvw"]

"(ghi)(jk(lmn)(op)))rstuvw" "()" mated
["(ghi)" "(jk(lmn)(op)))rstuvw"]

"(abc(def)(ghi)(jk(" "()" mated
["(abc(def)(ghi)(jk(" ""]

in k:

mated:{(0,((#x)&1+(-/+\'x~'/:y)?0))_ x}

s:"(abc(def)(ghi)(jk(lmn)(op)))rstuvw"
mated[s;"()"]
("(abc(def)(ghi)(jk(lmn)(op)))"
"rstuvw")

transcribed into XY:

; mated [dup] dip mate 0 ,. _. ;
; mate [dup] dip [mate.] each/ i - 0 ? 1 + [#:] dip & ;
; mate. [~] each\ ,: 0 [+] under! ;

to construct the revised conditional i described to daniel,
one would say something like

queue [if: fi:] mated

to split the queue.