What's happening here is that your function takes effectively 0 time,
but when you ran the first version, there was a GC pause during it
(that's why there's the "gc time: 9" there). GC pauses can happen at
any time, basically, so it's not something about what your function is
doing.

Here's a benchmark of your two functions that takes long enough to run
that it avoids some of these issues, and also runs a GC before
benchmarking: https://gist.github.com/7cb4645308d8572e2250833ef7b90b7c

On my machine, I get 40 ms for version 1, and 100 ms for version 2, as
you expected.

Sam

On Wed, Aug 5, 2020 at 11:21 AM wanp...@gmail.com <wanpee...@gmail.com> wrote:
>
> I was working on a exercism problem named Raindrops.
>
> Problem description:
> Convert a number to a string, the contents of which depend on the number's 
> factors.
>
> If the number has 3 as a factor, output 'Pling'.
> If the number has 5 as a factor, output 'Plang'.
> If the number has 7 as a factor, output 'Plong'.
> If the number does not have 3, 5, or 7 as a factor, just pass the number's 
> digits straight through.
>
> I came out with two version.
>
> ; version 1
> (define (convert n)
>   (define pling (divides? 3 n))
>   (define plang (divides? 5 n))
>   (define plong (divides? 7 n))
>   (if (or pling plang plong)
>       (string-append (if pling "Pling" "")
>                      (if plang "Plang" "")
>                      (if plong "Plong" ""))
>       (number->string n)))
>
> ; version 2
> (define (convert n)
>   (define table '((3 . "Pling") (5 . "Plang") (7 . "Plong")))
>   (define result (for/list ([(k v) (in-dict table)] #:when (divides? k n)) v))
>   (if (empty? result) (number->string n)
>       (string-append* result)))
>
> (require math/number-theory)
>
> I thought version 1 would be faster, but it turned out to be wrong. Running 
> with raco test got following timing information.
>
> version 1
> cpu time: 9 real time: 9 gc time: 9
> version 2
> cpu time: 0 real time: 0 gc time: 0
>
> Then I ran both version in DrRacket, both output following result.
> cpu time: 0 real time: 0 gc time: 0
>
> It's strange, isn't it?
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/46592171-c357-4897-af1a-bea91c838cacn%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAK%3DHD%2BYN9USK2qU4WsoNhkeZtFn%2B5DfS4uNaZR0t%3DvjfZQ%2ByqQ%40mail.gmail.com.

Reply via email to