diff options
author | Leah Neukirchen <leah@vuxu.org> | 2022-11-28 20:25:09 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2022-11-28 20:25:09 +0100 |
commit | 73b23b27998906ec479a995434ca5b664f0c0912 (patch) | |
tree | 8a594b6d3e243760aa8767a7b0d3111d7a490972 /mew.scm | |
parent | 81f524c408894e57e29da8f72552200b92565adc (diff) | |
download | mew-73b23b27998906ec479a995434ca5b664f0c0912.tar.gz mew-73b23b27998906ec479a995434ca5b664f0c0912.tar.xz mew-73b23b27998906ec479a995434ca5b664f0c0912.zip |
sample: just shuffle if fewer elements are requested than available
Diffstat (limited to 'mew.scm')
-rw-r--r-- | mew.scm | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/mew.scm b/mew.scm index 8507634..7f491b9 100644 --- a/mew.scm +++ b/mew.scm @@ -450,8 +450,14 @@ ((o) ((gen-get o) (rand (len o)))) ((o k) - (if (or (<= k 0) (< (len o) k)) - #() + (cond + ((= k 0) (empty o)) + ((<= (len o) k) (let ((r (into #() o))) + (shuffle! r) + (if (vector? o) + r + (into (empty o) r)))) + (else ;; Algorithm L with additional shuffle at the end. ;; https://dl.acm.org/doi/pdf/10.1145/198429.198435 (let ((geto (gen-get o)) @@ -472,7 +478,7 @@ (if (vector? o) r (into (empty o) r))))) - ))) + )))) (define range (case-lambda |