diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2020-12-29 00:26:21 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2020-12-29 00:26:21 -0800 |
commit | 4b772db7b36abc597d17d2c994227b5c032323ae (patch) | |
tree | b5a9dd0346c859a3fe675fea31a4db28599d9bf2 | |
parent | 9dae5ba49c7595355ddcf336032c2e12aa84be5f (diff) | |
download | txr-4b772db7b36abc597d17d2c994227b5c032323ae.tar.gz txr-4b772db7b36abc597d17d2c994227b5c032323ae.tar.bz2 txr-4b772db7b36abc597d17d2c994227b5c032323ae.zip |
shuffle/nshuffle: take optional random state argument.
* eval.c (eval_init): Register shuffle and nshuffle as
two-argument functions with optional argument.
* lib.c (nshuffle): Take random-state argument, defaulting to
value of random_state special variable.
(shuffle): Take random-state argument, pass down to nshuffle.
* lib.h (shuffle, nshuffle): Declarations updated.
* txr.1: Updated.
-rw-r--r-- | eval.c | 4 | ||||
-rw-r--r-- | lib.c | 8 | ||||
-rw-r--r-- | lib.h | 4 | ||||
-rw-r--r-- | txr.1 | 8 |
4 files changed, 13 insertions, 11 deletions
@@ -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)); @@ -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); } @@ -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); @@ -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 |