clojure - clojure 中 FizzBu​​zz 的两种解决方案中,为什么其中一种更快?

标签 clojure profiling fizzbuzz

在 clojure 中的 FizzBu​​zz 的两个解决方案中,为什么第一个更快?

; #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

P.s.菲兹巴兹?

~ 如果数字可以被 3 整除,则打印 Fizz 而不是数字。如果它能被 5 整除,则打印 Buzz。如果它能被 3 和 5 整除,则打印 FizzBu​​zz。

最佳答案

当第一个解决方案返回对现有字符串的引用时,第二个解决方案会连接每个请求的字符串。 (str (if.​​.) (if.​​.)) 创建 2 个中间字符串。

如果我可以补充一点,为了进行更正确的分析,您需要重复运行这些函数一定数量的周期。为了获得更好的结果,请执行两次并丢弃第一个结果,这将允许 Java 即时编译器完成其工作。

关于clojure - clojure 中 FizzBu​​zz 的两种解决方案中,为什么其中一种更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333595/

相关文章:

clojure - 多行协议(protocol)方法文档字符串应该如何格式化?

matlab - 为什么在 Matlab 分析器中单行比使用 tic 命令计时时慢?

javascript - Javascript 中的 FizzBu​​zz 程序(已给出详细信息)

javascript - 尝试使用 .innerHTMLlog 打印数据出现错误 Uncaught TypeError : undefined is not a function

java - FizzBu​​zz 程序 : how to make the output correct?

clojure - Ring 和 Pedestal 之间有什么关系 - 我是否需要了解 Ring 才能使用 Pedestal?

clojure - Clojure 中的最大公约数

mysql - JDBC 返回的 Clojure 映射在检查后变为 null

java - 如何在 Eclipse 中分析 Eclipse 应用程序?

python - 分析 python 多处理池