diff options
author | Leah Neukirchen <leah@vuxu.org> | 2022-11-26 18:06:19 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2022-11-26 18:06:19 +0100 |
commit | 2a0f96114fb75ecf6975812a041e96f7b9d161c5 (patch) | |
tree | 5b6753580edd6aec550f8d00f7177ca1f7d453b9 /mew.scm | |
parent | b33a8d20e524ecf57568a3af8e814a7fb3f7dd62 (diff) | |
download | mew-2a0f96114fb75ecf6975812a041e96f7b9d161c5.tar.gz mew-2a0f96114fb75ecf6975812a041e96f7b9d161c5.tar.xz mew-2a0f96114fb75ecf6975812a041e96f7b9d161c5.zip |
add shuffle
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)) |