Merge pull request #1648 from aarroyoc/docs-random

Compatible Doclog docs for library(random)
This commit is contained in:
Mark Thom
2022-12-05 06:05:02 +01:00
committed by GitHub

View File

@@ -1,24 +1,38 @@
:- module(random, [maybe/0, random/1, random_integer/3, set_random/1]). /**
This library provides probabilistic predicates and random number generators.
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
To retain desirable declarative properties, predicates that internally To retain desirable declarative properties, predicates that internally
use random numbers should be equipped with an argument that specifies use random numbers should be equipped with an argument that specifies
the random seed. This makes everything completely reproducible. the random seed. This makes everything completely reproducible.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ */
:- module(random, [maybe/0, random/1, random_integer/3, set_random/1]).
:- use_module(library(error)). :- use_module(library(error)).
% succeeds with probability 0.5. %% maybe.
%
% Succeeds with probability 0.5.
maybe :- '$maybe'. maybe :- '$maybe'.
% The higher the precision, the slower it gets. % The higher the precision, the slower it gets.
random_number_precision(64). random_number_precision(64).
%% random(-R).
%
% Generates a random floating number between 0 (inclusive) and 1 (exclusive).
random(R) :- random(R) :-
var(R), var(R),
random_number_precision(N), random_number_precision(N),
rnd(N, R). rnd(N, R).
%% random_integer(+Lower, +Upper, -R).
%
% Generates a random integer number between Lower (inclusive) and Upper (exclusive).
%
% Throws instantiation\_error if Lower or Upper are variables.
%
% Throws type\_error if Lower or Upper aren't integers.
random_integer(Lower, Upper, R) :- random_integer(Lower, Upper, R) :-
var(R), var(R),
( (var(Lower) ; var(Upper)) -> ( (var(Lower) ; var(Upper)) ->
@@ -46,6 +60,10 @@ rnd_(N, R0, R) :-
R1 is R0 + 1.0 / 2.0 ^ N, R1 is R0 + 1.0 / 2.0 ^ N,
rnd_(N1, R1, R). rnd_(N1, R1, R).
%% set_random(+Seed).
%
% Sets a seed that will be used for subsequent random generations in this library.
% It's necessary to set a seed to provide reproducible executions using this library.
set_random(Seed) :- set_random(Seed) :-
( nonvar(Seed) -> ( nonvar(Seed) ->
( Seed = seed(S) -> ( Seed = seed(S) ->