@0,1⦊fn permutate<T: Copy + Display>(xs: &mut [T], k: usize) { let n = length(xs); if k == n⦉@0,1 @2,4⦊{ display(xs); }⦉@2,4 else if @3⦊k < n⦉@3 { for @12,14,15,16,17,18⦊i⦉@12,14,15,16,17,18 in @5,7⦊k..n⦉@5,7 @12,14,15,16,17,18⦊{ swap(xs, i, k); permutate(xs, k + 1); swap(xs, i, k); }⦉@12,14,15,16,17,18 } else @6,19⦊{ error(); }⦉@6,19 }@21⦊⦉@21