diff options
Diffstat (limited to 'mew.scm')
-rw-r--r-- | mew.scm | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/mew.scm b/mew.scm index 1c1674c..c5f1f31 100644 --- a/mew.scm +++ b/mew.scm @@ -17,7 +17,7 @@ odometer one-of op op* per prn proj puts rand range rep - scan scan-right sing? search seq set set-at str slurp + scan scan-right sing? search seq set set-at shuffle str slurp tally-accumulator tbl time while uniq-accumulator unlist until @@ -401,6 +401,17 @@ ((n) (pseudo-random-integer n)) ((n m) (+ n (pseudo-random-integer (- m n)))))) + (define (shuffle v) + (let loop ((i (- (vector-length v) 1))) + (when (positive? i) + (let* ((j (rand (+ i 1))) + (vi (vector-ref v i)) + (vj (vector-ref v j))) + (vector-set! v i vj) + (vector-set! v j vi) + (loop (dec i))))) + v) + (define range (case-lambda (() (make-range-generator 0 +inf.0 1)) |