[racket] Neil: Is there a sensible way to sample from the naturals? EOM
On Wed, Feb 19, 2014 at 5:02 PM, Neil Toronto <neil.toronto at gmail.com> wrote:
>
> (: random-natural/no-mean (-> Real Natural))
> (define (random-natural/no-mean prob-zero)
> (define n (exact-floor (sample (geometric-dist prob-zero))))
> (define m1 (assert (expt 2 n) integer?))
> (define m0 (quotient m1 2))
> (max 0 (random-integer m0 m1)))
>
> The "max 0" keeps TR from complaining that `random-integer' returns an
> Integer.
These both look like places where `math` could do better here with types.
Specifically, `geometric-dist` should probably say that it produces
non-negative floats. That would fix the need for the `assert`.
Second, `random-integer` could have the type: (case-> (Natural Natural
-> Natural) (Integer Integer -> Integer)). That would fix the need
for `max`.
Finally, I don't understand why `geometric-dist` returns floats and
not integers, anyway.
Sam