summaryrefslogtreecommitdiff
path: root/modules/language/python/module/_random.scm
blob: 74b9492e8ed739fbd94a21ed0626826d26e8651f (about) (plain)
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
(define-module (language python module _random)
  #:use-module (oop pf-objects)
  #:use-module (language python string)
  #:export (Random))

(define-syntax-rule (aif it p . l) (let ((it p)) (if p . l)))

(define-python-class Random ()
  (define seed
    (lambda (self s)
      (rawset self '_state (seed->random-state (format #f "~a" s)))))

  (define setstate
    (lambda (self s)
      (rawset self '_state s)))

  (define getstate
    (lambda (self)
      (aif it (rawref self '_state)
           it
           (let ((ret (random-state-from-platform)))
             (set self '_state ret)
             ret))))

  (define getrandbits '(no))
  (define random
    (lambda (self)
      (set! *random-state* (getstate self))
      (let ((x (random:uniform)))
        (rawset self '_state *random-state*)
        x))))