File: randerlin.dats

package info (click to toggle)
ats2-lang 0.4.2-6
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 40,528 kB
  • sloc: ansic: 389,898; makefile: 7,138; javascript: 1,852; lisp: 811; sh: 657; php: 573; python: 387; perl: 365
file content (84 lines) | stat: -rw-r--r-- 1,314 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//usr/bin/env myatscc "$0"; exit
(* ****** ****** *)
(*
**
** Linear random number generator
**
*)
(* ****** ****** *)
//
// How to test:
// ./randerlin
// valgrind ./randerlin
//
// How to compile:
// patscc -DATS_MEMALLOC_LIBC -o randerlin randerlin.dats
//
(* ****** ****** *)
//
(*
##myatsccdef=\
patsopt --constraint-ignore --dynamic $1 | \
tcc -run -DATS_MEMALLOC_LIBC -I${PATSHOME} -I${PATSHOME}/ccomp/runtime -
*)
//
(* ****** ****** *)
//
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)

vtypedef
randerlin = streamer_vt (ulint)

(* ****** ****** *)

extern
fun randerlin_make (): randerlin

(* ****** ****** *)

implement
randerlin_make () = let
//
fun aux
(
  state: ulint
) : stream_vt (ulint) = $ldelay
(
//
let
//
val state =
  (state * 196314165UL) + 907633515UL
//
in
  stream_vt_cons (state, aux (state))
end
//
) (* end of [$ldelay] *) // end of [val]
//
in
  streamer_vt_make (aux (31435926536UL(*init*)))
end // end of [randerlin_make]

(* ****** ****** *)

implement
main0 () =
{
//
val r0 = randerlin_make ()
//
val () = println! ("randerlin(r0) = ", r0[])
val () = println! ("randerlin(r0) = ", r0[])
val () = println! ("randerlin(r0) = ", r0[])
//
val () = ~r0 // freeing the random number generator
//
} (* end of [main0] *)

(* ****** ****** *)

(* end of [randerlin.dats] *)