utils: Add in-random.
This commit is contained in:
parent
f09f24d2dd
commit
9502a9e981
2 changed files with 46 additions and 1 deletions
|
@ -129,3 +129,22 @@
|
||||||
(test-case "Functions"
|
(test-case "Functions"
|
||||||
(check-true (procedure-fixed-arity? not))
|
(check-true (procedure-fixed-arity? not))
|
||||||
(check-false (procedure-fixed-arity? +)))
|
(check-false (procedure-fixed-arity? +)))
|
||||||
|
|
||||||
|
(test-case "Randomness"
|
||||||
|
(begin
|
||||||
|
(random-seed 0)
|
||||||
|
(check-equal? (stream->list (stream-take (in-random 100) 10))
|
||||||
|
'(85 65 20 40 89 45 54 38 26 62))
|
||||||
|
(check-equal? (stream->list (stream-take (in-random 50 100) 10))
|
||||||
|
'(75 59 82 85 61 85 59 64 75 53))
|
||||||
|
(check-equal? (stream->list (stream-take (in-random) 10))
|
||||||
|
'(0.1656109603231493
|
||||||
|
0.9680391127132195
|
||||||
|
0.051518813640790355
|
||||||
|
0.755901955353936
|
||||||
|
0.5923534604277275
|
||||||
|
0.5513340634474264
|
||||||
|
0.7022057040731392
|
||||||
|
0.48375400938578744
|
||||||
|
0.7538961707172924
|
||||||
|
0.01828428516237329))))
|
||||||
|
|
28
utils.rkt
28
utils.rkt
|
@ -33,7 +33,11 @@
|
||||||
[collect-by-key/sets (-> (listof any/c) (listof any/c) (values (listof any/c) (listof (set/c any/c))))]
|
[collect-by-key/sets (-> (listof any/c) (listof any/c) (values (listof any/c) (listof (set/c any/c))))]
|
||||||
|
|
||||||
[ht-values/list->set (-> (hash/c any/c (listof any/c)) (hash/c any/c (set/c any/c)))]
|
[ht-values/list->set (-> (hash/c any/c (listof any/c)) (hash/c any/c (set/c any/c)))]
|
||||||
[procedure-fixed-arity? (-> procedure? boolean?)])
|
[procedure-fixed-arity? (-> procedure? boolean?)]
|
||||||
|
[in-random (case-> (-> (stream/c (and/c real? inexact? (>/c 0) (</c 1))))
|
||||||
|
(-> (integer-in 1 4294967087) (stream/c exact-nonnegative-integer?))
|
||||||
|
(-> exact-integer? (integer-in 1 4294967087)
|
||||||
|
(stream/c exact-nonnegative-integer?)))])
|
||||||
;; Contracts
|
;; Contracts
|
||||||
(contract-out [variable-mapping? contract?]
|
(contract-out [variable-mapping? contract?]
|
||||||
[string-variable-mapping? contract?]
|
[string-variable-mapping? contract?]
|
||||||
|
@ -329,3 +333,25 @@
|
||||||
(define (procedure-fixed-arity? func)
|
(define (procedure-fixed-arity? func)
|
||||||
(match (procedure-arity func)
|
(match (procedure-arity func)
|
||||||
[(arity-at-least _) #f] [arity #t]))
|
[(arity-at-least _) #f] [arity #t]))
|
||||||
|
|
||||||
|
|
||||||
|
;;; ==========
|
||||||
|
;;; Randomness
|
||||||
|
;;; ==========
|
||||||
|
|
||||||
|
;;; Generates a stream of inexact random numbers. The meaning of the
|
||||||
|
;;; arguments is the same as for the function random:
|
||||||
|
;;;
|
||||||
|
;;; (in-randoms k) — a sequence of random exact integers in the range
|
||||||
|
;;; 0 to k-1.
|
||||||
|
;;;
|
||||||
|
;;; (in-randoms min max) — a sequence of random exact integers the
|
||||||
|
;;; range min to max-1.
|
||||||
|
;;;
|
||||||
|
;;; (in-randoms) — a sequence of random inexact numbers between
|
||||||
|
;;; 0 and 1.
|
||||||
|
(define in-random
|
||||||
|
(case-lambda
|
||||||
|
[() (for/stream ([i (in-naturals)]) (random))]
|
||||||
|
[(k) (for/stream ([i (in-naturals)]) (random k))]
|
||||||
|
[(min max) (for/stream ([i (in-naturals)]) (random min max))]))
|
||||||
|
|
Loading…
Reference in a new issue