Created
April 25, 2020 20:37
-
-
Save shirok/d79ebb73a1a1d0ff1bbf0052a5458b93 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Benchmark: ran giterate0, giterate0-1, giterate0-2, giterate1, giterate1-1, giterate2, each for 10 times. | |
giterate0: 14.390 real, 21.430 cpu (21.250 user + 0.180 sys)@0.47/s n=10 | |
giterate0-1: 6.278 real, 6.270 cpu ( 6.270 user + 0.000 sys)@1.59/s n=10 | |
giterate0-2: 6.561 real, 6.560 cpu ( 6.560 user + 0.000 sys)@1.52/s n=10 | |
giterate1: 7.057 real, 7.050 cpu ( 7.050 user + 0.000 sys)@1.42/s n=10 | |
giterate1-1: 6.960 real, 6.960 cpu ( 6.960 user + 0.000 sys)@1.44/s n=10 | |
giterate2: 5.934 real, 5.930 cpu ( 5.930 user + 0.000 sys)@1.69/s n=10 | |
Rate giterate0 giterate0-1 giterate0-2 giterate1 giterate1-1 giterate2 | |
giterate0 0/s -- 0.293 0.306 0.329 0.325 0.277 | |
giterate0-1 2/s 3.418 -- 1.046 1.124 1.110 0.946 | |
giterate0-2 2/s 3.267 0.956 -- 1.075 1.061 0.904 | |
giterate1 1/s 3.040 0.889 0.930 -- 0.987 0.841 | |
giterate1-1 1/s 3.079 0.901 0.943 1.013 -- 0.852 | |
giterate2 2/s 3.614 1.057 1.106 1.189 1.174 -- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(use gauche.time) | |
(use gauche.generator) | |
(define (giterate0 f x) | |
(^[] | |
(begin0 x | |
(set! x (f x))))) | |
(define (giterate0-1 f x) | |
(^[] | |
(rlet1 x_ x | |
(set! x (f x))))) | |
(define (giterate0-2 f x) | |
(let ((x_ x)) | |
(^[] | |
(set! x_ x) | |
(set! x (f x)) | |
x_))) | |
(define (giterate1 f x) | |
(gcons* x | |
(^[] | |
(set! x (f x)) | |
x))) | |
(define (gcons1 item g) | |
(define (gen) | |
(set! gen g) | |
item) | |
(^[] (gen))) | |
(define (giterate1-1 f x) | |
(gcons1 x | |
(^[] | |
(set! x (f x)) | |
x))) | |
(define (giterate2 f x) | |
(^[] | |
(set! x (f x)) | |
x)) | |
(define (runner proc) | |
(^[] ((gdrop (proc (cut + 1 <>) 1) 10000000)))) | |
(define (main args) | |
(time-these/report | |
10 | |
`((giterate0 . ,(runner giterate0)) | |
(giterate0-1 . ,(runner giterate0-1)) | |
(giterate0-2 . ,(runner giterate0-2)) | |
(giterate1 . ,(runner giterate1)) | |
(giterate1-1 . ,(runner giterate1-1)) | |
(giterate2 . ,(runner giterate2)) | |
))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment