functor RPerm(ArraySig) = struct fun rperm n = let val a = tabulate (n, fn x => x) fun swap(i,j) = let val t = a sub i in( update(a,i,a sub j); update(a,j,t)) end fun permute 0 = () | permute s = (swap(rand s, s-1); permute (s-1)) in (permute n; a) end