# [racket] Mutable state vs RAM on fire

 From: joshua at anwu.org (joshua at anwu.org) Date: Wed May 2 18:50:17 EDT 2012 Previous message: [racket] Mutable state vs RAM on fire Next message: [racket] Mutable state vs RAM on fire Messages sorted by: [date] [thread] [subject] [author]

```You're right; your version is easier on the eyes.

Starting from 1 instead of 0 was deliberate, however.
DZ's method involves multiplying N polynomials of degree X, where X is the number of sides on a die and N is the number of dice.
So, 2d6 would be like this:

(x^1 + x^2 + x^3 + x^4 + x^5 + x^6) (x^1 + x^2 + x^3 + x^4 + x^5 + x^6)

With the final exponents as the number rolled, and the final coefficients as the chance (out of 6^2) to roll it.

Which is why I used alists, at first; I don't really need the 0 part of the vector.
I think I will give hashes a try.

tk

On Wed, May 02, 2012 at 05:08:03PM -0400, Matthias Felleisen wrote:
>
> > I rewrote the thing to use vectors instead, and altered the polynomial multiplication function to use (begin) and (vector-set!):
> >
> > https://github.com/TurtleKitty/Dice/blob/67c2b49707132395f73b43afe111e3904b3898f2/dice.rkt
> >
> > It too now calculates three hundred dice without breaking a sweat, but... I feel dirty.
>
>
> It's also wrong and stylistically bad:
>
> (define (poly-mul p1 p2)
>   (define deg1 (poly-deg p1))
>   (define deg2 (poly-deg p2))
>   (define noob (make-vector (- (+ deg1 deg2) 1)))
>   ;; MF: bug, these were 1s:
>   (for* ([i (in-range 0 deg1)] [j (in-range 0 deg2)])
>     (define k (+ i j))
>     (define a  (* (vector-ref p1 i) (vector-ref p2 j)))
>     (vector-set! noob k (+ (vector-ref noob k) a)))
>   noob)
>
>
>
> > Can anyone recommend a functional approach that won't melt my motherboard?
> > I'm considering hashes, since they have the immutable version of hash-set that vectors seem to lack, but I thought I'd ask the experts.
>
>
> Do try hash and for/hash. I think you will be pleased with the performance. -- Matthias
>
> p.s. Do report back.
>
>
```

 Posted on the users mailing list. Previous message: [racket] Mutable state vs RAM on fire Next message: [racket] Mutable state vs RAM on fire Messages sorted by: [date] [thread] [subject] [author]