procedure scollate(args[]) local lseq, i args := copyargs ! args lseq := [] repeat every i := 1 to *args do put(lseq, get(args[i])) | break break return lseq end procedure copyargs(args[]) local new_args new_args := [] every put(new_args, copy(spromote(!args))) return new_args end procedure splace(x1, x2) local lseq, i x1 := copy(spromote(x1)) x2 := spromote(x2) lseq := [] every i := !x2 do every put(lseq, !x1 + i - 1) return lseq end procedure sscale(x, i) local lseq, j lseq := copy(spromote(x)) every j := 1 to *lseq do lseq[j] := (lseq[j] - 1) * i + 1 return lseq end procedure srepl(x, i) local lseq, j lseq := [] every j := !spromote(x) do every 1 to i do put(lseq, j) return lseq end