def shuffle.go

bend-kit-random@0.1.0.1 · random.bend:109

import bend-kit-random@0.1.0.1/random.bend as Random
import Base

109# Fisher-Yates: at slot i, jr is below(i + 1); slot i swaps with slot j.
110# At k = 0, i is 0 and below(1) drew nothing.
111def shuffle.go(~T: Data, k: Nat, +i: U32, a: Array<T>, jr: U32 & Rng) -> Array<T> & Rng:
112  match k:
113    case 0n:
114      (j, r) = jr
115      (a, r)
116    case 1n+p:
117      (+j, r) = jr
118      shuffle.go(~T, p, (i - 1 : U32), shuffle.swap(~T, i, j, Array.get(T, a, i)),
119        below(i, r))

Uses (10)

Used by (1)