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"
|
||||
(check-true (procedure-fixed-arity? not))
|
||||
(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))))]
|
||||
|
||||
[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
|
||||
(contract-out [variable-mapping? contract?]
|
||||
[string-variable-mapping? contract?]
|
||||
|
@ -329,3 +333,25 @@
|
|||
(define (procedure-fixed-arity? func)
|
||||
(match (procedure-arity func)
|
||||
[(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