This program generates random permutation of N objects, the integers 0
through N-1. The strategy is to create an array, A, of length N
containing the values 0 through N-1 in order. Then, do the following
step for each index i, starting at N-1 and ending at 1: generate a
random number j between 0 and i inclusive, and swap A(i) and A(j).

This algorithm is due originally to: R.A. Fisher F. Yates. ''Statistical tables for biological, agricultural and medical research'' (3rd ed.). pp. 26–27. London: Oliver & Boyd, 1948. It was popularized by Donald Knuth in ''The Art of Computer Programming vol 2''.


val N = 5  -- size of permutation array
val ar = fillArray(Array(N), lambda(i) = i)

{- swap two refs' values -}
def swapRefs(x, y) = x? >z> x := y? >> y := z

def randomize(1) = signal
def randomize(n) =  -- Randomize array a of size n, n >= 1
 random(n) >k>
 swapRefs(ar(n-1),ar(k)) >>

randomize(N) >> map(let, ar) -- map(let, ar) creates a list from array ar