summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eval.c4
-rw-r--r--lib.c8
-rw-r--r--lib.h4
-rw-r--r--txr.18
4 files changed, 13 insertions, 11 deletions
diff --git a/eval.c b/eval.c
index aaf34aaf..a19524a6 100644
--- a/eval.c
+++ b/eval.c
@@ -6927,9 +6927,9 @@ void eval_init(void)
reg_fun(intern(lit("nsort"), user_package), func_n3o(nsort, 1));
reg_fun(intern(lit("sort"), user_package),
func_n3o(if3(opt_compat && opt_compat <= 237, nsort, sort), 1));
- reg_fun(intern(lit("nshuffle"), user_package), func_n1(nshuffle));
+ reg_fun(intern(lit("nshuffle"), user_package), func_n2o(nshuffle, 1));
reg_fun(intern(lit("shuffle"), user_package),
- func_n1(if3(opt_compat && opt_compat <= 237, nshuffle, shuffle)));
+ func_n2o(if3(opt_compat && opt_compat <= 237, nshuffle, shuffle), 1));
reg_fun(intern(lit("find"), user_package), func_n4o(find, 2));
reg_fun(intern(lit("rfind"), user_package), func_n4o(rfind, 2));
reg_fun(intern(lit("find-if"), user_package), func_n3o(find_if, 2));
diff --git a/lib.c b/lib.c
index b3873c95..462e19a8 100644
--- a/lib.c
+++ b/lib.c
@@ -9653,7 +9653,7 @@ val sort(val seq, val lessfun, val keyfun)
abort();
}
-val nshuffle(val seq)
+val nshuffle(val seq, val randstate)
{
seq_info_t si = seq_info(seq);
@@ -9673,7 +9673,7 @@ val nshuffle(val seq)
case SEQ_VECLIKE:
case SEQ_HASHLIKE:
{
- val rs = random_state;
+ val rs = default_arg(randstate, random_state);
val n = length(seq);
val i;
@@ -9696,10 +9696,10 @@ val nshuffle(val seq)
abort();
}
-val shuffle(val seq)
+val shuffle(val seq, val randstate)
{
if (seqp(seq))
- return nshuffle(copy(seq));
+ return nshuffle(copy(seq), randstate);
type_mismatch(lit("nshuffle: ~s is not a sequence"), seq, nao);
}
diff --git a/lib.h b/lib.h
index 535c2c45..c1951a88 100644
--- a/lib.h
+++ b/lib.h
@@ -1129,8 +1129,8 @@ val interpose(val sep, val seq);
val merge(val list1, val list2, val lessfun, val keyfun);
val nsort(val seq, val lessfun, val keyfun);
val sort(val seq, val lessfun, val keyfun);
-val nshuffle(val seq);
-val shuffle(val seq);
+val nshuffle(val seq, val randstate);
+val shuffle(val seq, val randstate);
val multi_sort(val lists, val funcs, val key_funcs);
val sort_group(val seq, val keyfun, val lessfun);
val unique(val seq, val keyfun, struct args *hashv_args);
diff --git a/txr.1 b/txr.1
index e287c8bb..1829471c 100644
--- a/txr.1
+++ b/txr.1
@@ -33727,8 +33727,8 @@ in the APL language.
.coNP Functions @ shuffle and @ nshuffle
.synb
-.mets (shuffle << sequence )
-.mets (nshuffle << sequence )
+.mets (shuffle < sequence <> [ random-state ])
+.mets (nshuffle < sequence <> [ random-state ])
.syne
.desc
The
@@ -33745,7 +33745,9 @@ itself.
The rearrangement depends on pseudo-random numbers obtained from the
.code rand
-function.
+function. The
+.meta random-state
+argument, if present, is passed to that function.
The
.code nshuffle