Bonjour,
Je suis en train de programmer un petit jeux en scheme qui utilise un dé.
Après quelques recherche je suis tombé sur cette procédure qui renvoie un chiffre aléatoire :
Cependant, pour que (random n) renvoie des valeurs différente à chaque fois que je relance mon programme, on conseille d'initialiser randomnumber (cad le seed) grace au run-time et wall-clock-time.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 (define random-maker (let* ((multiplier 48271) (modulus 2147483647) (apply-congruence (lambda (current-seed) (let ((candidate (modulo (* current-seed multiplier) modulus))) (if (zero? candidate) modulus candidate)))) (coerce (lambda (proposed-seed) (if (integer? proposed-seed) (- modulus (modulo proposed-seed modulus)) 19860617)))) ;; an arbitrarily chosen birthday (lambda (initial-seed) (let ((seed (coerce initial-seed))) (lambda args (cond ((null? args) (set! seed (apply-congruence seed)) (/ (- modulus seed) modulus)) ((null? (cdr args)) (let* ((proposed-top (ceiling (abs (car args)))) (exact-top (if (inexact? proposed-top) (inexact->exact proposed-top) proposed-top)) (top (if (zero? exact-top) 1 exact-top))) (set! seed (apply-congruence seed)) (inexact->exact (floor (* top (/ seed modulus)))))) ((eq? (cadr args) 'reset) (set! seed (coerce (car args)))) (else (display "random: unrecognized message") (newline))))))) (define random (random-maker randomnumber)) ;; randombumber
Il donne m^me en exemple comment faire dans SCM cad
(random-maker (+ (* 100000 (get-internal-run-time)) (current-time)))
Moi je travaille avec Dr Scheme, et je n'ai pas trouver d'équivalent (au passage ça ne fait que qq mois que je programme en scheme)
Donc si vous savez comment y faire appel avec Dr Scheme ou m^me une autre solution plus élégante pour générer un chiffre aléatoire, je vous serais en très reconnaissant !
Encore merci pour votre aide !
Partager