22#define S_ISDIR(x) (((x)&_S_IFDIR)==_S_IFDIR)
37unsigned int current_seed;
49 return (((
double) random ()) / 0x7fffffffL );
51 return (((
double) (rand ()) / RAND_MAX));
53 Yap_Error(SYSTEM_ERROR_INTERNAL, TermNil,
54 "random not available in this configuration");
61p_init_random_state ( USES_REGS1 )
63 register Term t0 = Deref (ARG1);
67 return(Yap_unify(ARG1,MkIntegerTerm((Int)current_seed)));
72 current_seed = (
unsigned int) IntOfTerm (t0);
73 else if (IsFloatTerm (t0))
74 current_seed = (
unsigned int) FloatOfTerm (t0);
76 current_seed = (
unsigned int) LongIntOfTerm (t0);
78 new = (
char *) malloc(256);
79 old = initstate(random(),
new, 256);
80 return Yap_unify(ARG2, MkIntegerTerm((Int)old)) &&
81 Yap_unify(ARG3, MkIntegerTerm((Int)
new));
85p_set_random_state ( USES_REGS1 )
87 register Term t0 = Deref (ARG1);
93 if (IsIntegerTerm (t0))
94 new = (
char *) IntegerOfTerm (t0);
97 old = setstate(
new );
98 return Yap_unify(ARG2, MkIntegerTerm((Int)old));
102p_release_random_state ( USES_REGS1 )
104 register Term t0 = Deref (ARG1);
107 if (IsVarTerm (t0)) {
110 if (IsIntegerTerm (t0))
111 old = (
char *) IntegerOfTerm (t0);
120Srandom ( USES_REGS1 )
122 register Term t0 = Deref (ARG1);
123 if (IsVarTerm (t0)) {
124 return(Yap_unify(ARG1,MkIntegerTerm((Int)current_seed)));
129 current_seed = (
unsigned int) IntOfTerm (t0);
130 else if (IsFloatTerm (t0))
131 current_seed = (
unsigned int) FloatOfTerm (t0);
133 current_seed = (
unsigned int) LongIntOfTerm (t0);
135 srand48(current_seed);
137 srandom(current_seed);
154 current_seed = (
unsigned int) time (NULL);
156 srand48 (current_seed);
158 srandom (current_seed);
160 srand (current_seed);
165Yap_InitRandomPreds (
void)
167 Yap_InitCPred (
"srandom", 1, Srandom, SafePredFlag);
169 Yap_InitCPred (
"init_random_state", 3, p_init_random_state, SafePredFlag);
170 Yap_InitCPred (
"set_random_state", 2, p_set_random_state, SafePredFlag);
171 Yap_InitCPred (
"release_random_state", 1, p_release_random_state, SafePredFlag);