TUPLE: cross first rest ; C: cross ( seq cross -- cross ) : >cross< ( cross -- first rest ) dup first>> swap rest>> ; INSTANCE: cross sequence : indexes ( n cross -- first-n rest-n ) rest>> length /mod ; : 2nth ( n1 n2 seq1 seq2 -- elt1 elt2 ) swapd [ nth ] 2bi@ ; M: cross nth [ indexes ] keep >cross< 2nth swap prefix ; M: cross length dup first>> length swap rest>> length * ; : n ( seqs -- cross ) [ { { } } clone ] [ unclip swap n ] if-empty ;