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:

    rng:with-random-ints(
      $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

    rng:random-ints(
      $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

[1] https://github.com/LeoWoerteler/xq-modules/blob/master/src/main/xquery/modules/rng.xqm
[2] https://github.com/LeoWoerteler/xq-modules
[3] http://en.wikipedia.org/wiki/Linear_congruential_generator
[4] https://github.com/LeoWoerteler/xq-modules/blob/master/src/test/xquery/int-set-test.xq#L33-51 [5] https://github.com/LeoWoerteler/xq-modules/blob/master/src/test/xquery/heap-test.xq#L10
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk

Reply via email to