summary refs log tree commit diff
path: root/mew.scm
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2022-11-28 20:25:09 +0100
committerLeah Neukirchen <leah@vuxu.org>2022-11-28 20:25:09 +0100
commit73b23b27998906ec479a995434ca5b664f0c0912 (patch)
tree8a594b6d3e243760aa8767a7b0d3111d7a490972 /mew.scm
parent81f524c408894e57e29da8f72552200b92565adc (diff)
downloadmew-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.scm12
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