[racket] (Math) Computing the mean is slow in Typed Racket
On 02/08/2013 03:19 AM, Laurent wrote:
>
> On Fri, Feb 8, 2013 at 10:56 AM, Jens Axel Søgaard
> <jensaxel at soegaard.net <mailto:jensaxel at soegaard.net>> wrote:
>
> Try
> [xs (if (list? xs) xs (sequence->list xs))])
> and see what the new timings are.
>
>
> Perfect! I'm glad it was so simple.
>
> old mean:
> cpu time: 3621 real time: 3621 gc time: 2613
> 494936207/10000000
>
> new mean:
> cpu time: 564 real time: 563 gc time: 0
> 494936207/10000000
>
> my-mean:
> cpu time: 512 real time: 515 gc time: 132
> 494936207/10000000
Thanks for catching this!
> Had to explicitely cast xs to a list of reals:
> (cast (if (list? xs) xs (sequence->list xs))
> (Listof Real))
>
> But shouldn't this patch be applied directly to sequence->list instead?
That's one option. Since lists are immutable, I can't think of why
having `sequence->list' sometimes not make a copy would be bad.
It might also be a good idea to handle vectors specially.
Another option is to do something with Typed Racket to get rid of this
type error, which makes the cast necessary:
Type Checker: Expected (Listof Real), but got
(U (Listof Real) (Pairof Any (Listof Any)))
I don't know why it does this, but there might be a good reason. Vincent?
Neil ⊥