- Documentation
- Reference manual
- The SWI-Prolog library
- library(aggregate): Aggregation operators on backtrackable predicates
 - library(apply): Apply predicates on a list
 - library(assoc): Association lists
 - library(broadcast): Broadcast and receive event notifications
 - library(charsio): I/O on Lists of Character Codes
 - library(check): Consistency checking
 - library(clpb): CLP(B): Constraint Logic Programming over Boolean Variables
 - library(clpfd): CLP(FD): Constraint Logic Programming over Finite Domains
 - library(clpqr): Constraint Logic Programming over Rationals and Reals
 - library(csv): Process CSV (Comma-Separated Values) data
 - library(debug): Print debug messages and test assertions
 - library(error): Error generating support
 - library(gensym): Generate unique identifiers
 - library(iostream): Utilities to deal with streams
 - library(lists): List Manipulation
 - library(main): Provide entry point for scripts
 - library(nb_set): Non-backtrackable set
 - library(www_browser): Activating your Web-browser
 - library(option): Option list processing
 - library(optparse): command line parsing
 - library(ordsets): Ordered set manipulation
 - library(pairs): Operations on key-value lists
 - library(persistency): Provide persistent dynamic predicates
 - library(pio): Pure I/O
 - library(predicate_options): Declare option-processing of predicates
 - library(prolog_pack): A package manager for Prolog
 - library(prolog_xref): Cross-reference data collection library
 - library(quasi_quotations): Define Quasi Quotation syntax
 - library(random): Random numbers
 - library(readutil): Reading lines, streams and files
 - library(record): Access named fields in a term
 - library(registry): Manipulating the Windows registry
 - library(simplex): Solve linear programming problems
 - library(solution_sequences): Modify solution sequences
 - library(tabling): Tabled execution (SLG)
 - library(thread_pool): Resource bounded thread management
 - library(ugraphs): Unweighted Graphs
 - library(url): Analysing and constructing URL
 - library(varnumbers): Utilities for numbered terms
 - library(yall): Lambda expressions
 
 
 - The SWI-Prolog library
 - Packages
 
 - Reference manual
 
A.29 library(random): Random numbers
- author
 - R.A. O'Keefe, V.S. Costa, L. Damas, Jan Wielemaker
 - See also
 - Built-in function random/1: 
A is 
random(10) 
This library is derived from the DEC10 library random. Later, the core random generator was moved to C. The current version uses the SWI-Prolog arithmetic functions to realise this library. These functions are based on the GMP library.
- [det]random(-R:float)
 - Binds R to a new random float in the open interval (0.0,1.0).
 - [semidet]random_between(+L:int, +U:int, -R:int)
 - Binds R to a random integer in [L,U] (i.e., including both L and U). Fails silently if U<L.
 - [det]random(+L:int, +U:int, -R:int)
 - [det]random(+L:float, +U:float, -R:float)
 - Generate a random integer or float in a range. If L and U 
are both integers, R is a random integer in the half open 
interval [L,U). If L and U 
are both floats, R is a float in the open interval (L,U).
- deprecated
 - Please use random/1 for generating a random float and random_between/3 for generating a random integer. Note that random_between/3 includes the upper bound, while this predicate excludes it.
 
 - [det]setrand(+State)
 - [det]getrand(-State)
 - Query/set the state of the random generator. This is intended for 
restarting the generator at a known state only. The predicate setrand/1 
accepts an opaque term returned by
getrand/1. This term 
may be asserted, written and read. The application may not make other 
assumptions about this term.
For compatibility reasons with older versions of this library, setrand/1 also accepts a term
rand(A,B,C), where A, B and C are integers in the range 1..30,000. This argument is used to seed the random generator. Deprecated.- Errors
 existence_error(random_state, _)is raised if the underlying infrastructure cannot fetch the random state. This is currently the case if SWI-Prolog is not compiled with the GMP library.- See also
 - set_random/1 and random_property/1 provide the SWI-Prolog native implementation.
 
 - [semidet]maybe
 - Succeed/fail with equal probability (variant of maybe/1).
 - [semidet]maybe(+P)
 - Succeed with probability P, fail with probability 1-P
 - [semidet]maybe(+K, +N)
 - Succeed with probability K/N (variant of maybe/1)
 - [semidet]random_perm2(?A, ?B, ?X, ?Y)
 - Does X=A,Y=B or X=B,Y=A with equal probability.
 - [semidet]random_member(-X, +List:list)
 - X is a random member of List. Equivalent to 
random_between(1,
|List|), followed by nth1/3. Fails of List is the empty list.- Compatibility
 - Quintus and SICStus libraries.
 
 - [semidet]random_select(-X, +List, -Rest)
 - [det]random_select(+X, -List, +Rest)
 - Randomly select or insert an element. Either List or Rest 
must be a list. Fails if List is the empty list.
- Compatibility
 - Quintus and SICStus libraries.
 
 - [det]randset(+K:int, +N:int, -S:list(int))
 - S is a sorted list of K unique random integers in 
the range 1..N. Implemented by enumerating 1..N 
and deciding whether or not the number should be part of the set. For 
example:
?- randset(5, 5, S). S = [1, 2, 3, 4, 5]. (always) ?- randset(5, 20, S). S = [2, 7, 10, 19, 20].
- See also
 - randseq/3.
 - bug
 - Slow if N is large and K is small.
 
 - [det]randseq(+K:int, +N:int, -List:list(int))
 - S is a list of K unique random integers in the range 1..N. 
The order is random. Works as if defined by the following code.
randseq(K, N, List) :- randset(K, N, Set), random_permutation(Set, List).- See also
 - randset/3.
 
 - [det]random_permutation(+List, -Permutation)
 - [det]random_permutation(-List, +Permutation)
 - Permutation is a random permutation of List. This 
is intended to process the elements of List in random order. 
The predicate is symmetric.
- Errors
 - instantiation_error, 
type_error(list, _).