Lisp »Tips 'n Tricks
»Numeri Interi Casuali
(random numero_intero) imita la funzione random(numero_intero) del linguaggio Pascal.
(random n)
;|
(random n) (10 Luglio 2005)
Copyright (C) 2005 Claudio Piccini.
All rights reserved
www.cg-cad.com
Estrae un numero intero casuale da 0 a x-1
Il seme e' inizializzato con la variabile DATE
in questo modo la serie di numeri casuali
e' diversa in ogni sessione di gioco.
|;
(defun random ( x / m b c)
(if (not sd) (setq sd (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq sd (rem (+ (* b sd) c) m))
(fix (* (/ sd m) x))
)
;|
AutoLISP Tips & Tricks Volume I
[37] Numeri Casuali
|;
(defun rn ( / m b c )
(if (not seed)(setq seed (getvar "DATE")))
(setq m 65521 b 15937 c 33503)
(setq seed (rem (+ (* b seed) c) m))
(* (/ seed m) 15)
)
(defun c:test ( / i )
(setvar "cmdecho" 0)
(repeat (1+ (fix (rn))) ; da 1 a 15 ripetizioni
(setq i (random 10)) ; numeri [0-9]
(princ " i=")
(princ i)
)
(setvar "cmdecho" 1)
(princ)
)
;;;eof
|
Test del Lisp
TEST i=0 i=9 i=8 i=6
TEST i=2 i=2 i=9 i=3 i=9
TEST i=4 i=8 i=8 i=0 i=8 i=1 i=2 i=8
TEST i=1 i=7 i=4 i=7 i=0 i=9 i=5 i=8 i=1
TEST i=4 i=1 i=9 i=3 i=9 i=8
TEST i=7 i=7 i=5 i=7 i=3 i=7 i=0 i=8 i=4 i=6 i=3
TEST i=9 i=0 i=3 i=0 i=6 i=9 i=6 i=1 i=1 i=6 i=2 i=5
TEST i=2 i=3 i=7 i=9 i=4 i=8 i=3 i=7 i=0 i=0 i=2 i=9 i=3
TEST i=6 i=5 i=4
TEST i=3 i=6 i=4 i=5 i=0 i=9 i=4 i=5 i=3 i=6 i=6 i=0 i=0 i=9 i=2
TEST i=3
Test con (random 100):
TEST i=45 i=87 i=26 i=35 i=13 i=81 i=31 i=53 i=8 i=43 i=98 i=64 i=17
TEST i=57 i=45 i=19 i=12 i=84 i=4 i=26
TEST i=69 i=80 i=15 i=57 i=28 i=65 i=54 i=86 i=71 i=31 i=30 i=6
TEST i=19 i=78 i=43 i=62
Trick
Le variabili sd e seed sono variabili fantasma né dichiarate né inizializzate.
Lisp »Tips 'n Tricks
Ultimo Aggiornamento_Last Update: 10 Luglio 2005
|