: merge ( x y z -- z ) [| a b c | a b c a length 0 > b length 0 > and ] [| a b c | a b c 0 a nth 0 b nth over over < [| a b c x y | 0 a remove-nth b x c push ] [| a b c x y | a 0 b remove-nth y c push ] if ] while [| x y z | x y z y 0 = [| x y z | x z append ] [| x y z | y z append ] if ] call ;