[xquery-talk] Random number generation : requirements

Leonard Wörteler leo at woerteler.de
Tue May 6 16:20:13 PDT 2014

Hello Michael,

Am 06.05.2014 18:53, schrieb Michael Kay:
> If you have any applications that use or need such a function, please could I have a brief description of the way it uses random numbers, e.g. just wanting a single random number, a random permutation of 52 integers, an arbitrary sequence of random numebrs for test data generation, etc.

in contrast to everyone else (it seems) I implemented a *deterministic* 
random-number generator in XQuery [1] in order to generate reproducible 
fuzzy tests for my higher-order xq-modules project [2].

I used a simple Linear Congruential Generator [3] and implemented the 
following functions:

       $seed as xs:integer,
       $n as xs:integer,
       $start as item()*,
       $f as function(item()*, item()*) as item()*

realizes a constant-space fold over `$n` randomly generated `xs:int`s 
with initial seed `$seed`. This is used by

       $seed as xs:integer,
       $n as xs:integer
     ) as xs:int* {
       rng:with-random-ints($seed, $n, (), function($seq, $i) {
         ($seq, $i)

to generate a sequence of random `xs:int` values. The module is used in 
some tests [4,5].

You could obviously also implement `rng:with-random-ints(...)` in terms 
of `rng:random-ints(...)`:

     rng:with-random-ints($seed, $n, $start, $f) {
       fn:fold-left(rng:random-ints($seed, $n), $start, $f)

-- Leo

[2] https://github.com/LeoWoerteler/xq-modules
[3] http://en.wikipedia.org/wiki/Linear_congruential_generator

More information about the talk mailing list