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 [email protected] <[email protected]> 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 [email protected]. > 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 [email protected]. 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.

