3

clojure の FizzBu​​zz に対する 2 つのソリューションのうち、最初のソリューションの方が速いのはなぜですか?

; #1
(defn fizzbuzzer [z]
    "fizzbuzz checker."
    (let [fizz? (zero? (rem z 3))
          buzz? (zero? (rem z 5))
          fizzbuzz? (and fizz? buzz?)]

        (cond fizzbuzz? "FizzBuzz"
              buzz? "Buzz"
              fizz? "Fizz"
              :else z)))

; #2
(defn fizzbuzzer2 [z]
    "fizzbuzz checker."
    (let [fb (str
                (if (zero? (rem z 3)) "Fizz" "")
                (if (zero? (rem z 5)) "Buzz" ""))]
        (if (seq fb) fb z)))

; profiling ;
; (time (fizzbuzzer 1500))
;  => "Elapsed time: 0.098058 msecs"
; (time (fizzbuzzer2 1500))
;  => "Elapsed time: 0.150438 msecs"

;; note: profiling done on separate instances to avoid caching

Ps FizzBu​​zz?

~ 数が 3 で割り切れる場合は、数の代わりに Fizz を出力します。5 で割り切れる場合は、Buzz を出力します。3 と 5 の両方で割り切れる場合は、FizzBu​​zz を出力します。

4

1 に答える 1