(println "def") (def seed 256) (dotimes[i 3] […]
(println "def") (def seed 256) (dotimes[i 3] […]
(println "def") (def seed 256) (dotimes[i 3] (def rnd seed) (time(loop[i 0](when(< i 10000000) (def rnd (mod (+(* 7 rnd) 13) 9564)) (recur(inc i)) ))) (println rnd) ) (println "with-local-vars") (dotimes[i 3] (with-local-vars [rnd seed] (time(loop[i 0](when(< i 10000000) (var-set rnd (mod (+(* 7 @rnd) 13) 9564)) (recur(inc i)) ))) (println @rnd) ) ) (println "atom") (dotimes[i 3] (let [rnd (atom seed)] (time(loop[i 0](when(< i 10000000) (reset! rnd (mod (+(* 7 @rnd) 13) 9564)) (recur(inc i)) ))) (println @rnd) ) ) (println "volatile!") (dotimes[i 3] (let [rnd (volatile! seed)] (time(loop[i 0](when(< i 10000000) (vreset! rnd (mod (+(* 7 @rnd) 13) 9564)) (recur(inc i)) ))) (println @rnd) ) ) (println "ref") (dotimes[i 3] (let [rnd (ref seed)](dosync (time(loop[i 0](when(< i 10000000) (ref-set rnd (mod (+(* 7 @rnd) 13) 9564)) (recur(inc i)) ))) (println @rnd) )) ) (println "recur") (dotimes[i 3] (let [rnd "recur"] (time(let [ rnd (loop[i 0,rnd seed](if(< i 10000000) (recur(inc i) (mod (+(* 7 rnd) 13) 9564)) rnd )) ] (println rnd) )) ) ) ;インクリメント ;def ;"Elapsed time: 3512 msecs" ;20000000 ;"Elapsed time: 3525 msecs" ;20000000 ;"Elapsed time: 3498 msecs" ;20000000 ;with-local-vars ;"Elapsed time: 3581 msecs" ;20000000 ;"Elapsed time: 3501 msecs" ;20000000 ;"Elapsed time: 3579 msecs" ;20000000 ;atom ;"Elapsed time: 1608 msecs" ;20000000 ;"Elapsed time: 1632 msecs" ;20000000 ;"Elapsed time: 1609 msecs" ;20000000 ;volatile! ;"Elapsed time: 1262 msecs" ;20000000 ;"Elapsed time: 1264 msecs" ;20000000 ;"Elapsed time: 1258 msecs" ;20000000 ;ref ;"Elapsed time: 2442 msecs" ;20000000 ;"Elapsed time: 2441 msecs" ;20000000 ;"Elapsed time: 2427 msecs" ;20000000 ;recur ;20000000 ;"Elapsed time: 139 msecs" ;20000000 ;"Elapsed time: 136 msecs" ;20000000 ;"Elapsed time: 140 msecs" ;線形合同法 ;def ;"Elapsed time: 6431 msecs" ;9332 ;"Elapsed time: 6395 msecs" ;9332 ;"Elapsed time: 6392 msecs" ;9332 ;with-local-vars ;"Elapsed time: 6519 msecs" ;9332 ;"Elapsed time: 6567 msecs" ;9332 ;"Elapsed time: 6421 msecs" ;9332 ;atom ;"Elapsed time: 4394 msecs" ;9332 ;"Elapsed time: 4405 msecs" ;9332 ;"Elapsed time: 4384 msecs" ;9332 ;volatile! ;"Elapsed time: 4014 msecs" ;9332 ;"Elapsed time: 4050 msecs" ;9332 ;"Elapsed time: 3993 msecs" ;9332 ;ref ;"Elapsed time: 5260 msecs" ;9332 ;"Elapsed time: 5257 msecs" ;9332 ;"Elapsed time: 5318 msecs" ;9332 ;recur ;9332 ;"Elapsed time: 3492 msecs" ;9332 ;"Elapsed time: 3478 msecs" ;9332 ;"Elapsed time: 3470 msecs"