89 lines
1.8 KiB
Scheme
89 lines
1.8 KiB
Scheme
(printf "nested loop~n")
|
|
(time
|
|
(let loop ([n 10000])
|
|
(unless (zero? n)
|
|
(let loop2 ([m 10])
|
|
(if (zero? m)
|
|
(loop (sub1 n))
|
|
(loop2 (sub1 m)))))))
|
|
|
|
(printf "single loop~n")
|
|
(time
|
|
(let loop ([n 100000])
|
|
(unless (zero? n)
|
|
(loop (sub1 n)))))
|
|
|
|
(printf "Y loop~n")
|
|
(time
|
|
((lambda (f n) (f f n))
|
|
(lambda (loop n)
|
|
(unless (zero? n)
|
|
(loop loop (sub1 n))))
|
|
100000))
|
|
|
|
|
|
(printf "let closure recur~n")
|
|
(time
|
|
(let ([f (lambda (x) (sub1 x))])
|
|
(let loop ([n 100000])
|
|
(unless (zero? n)
|
|
(loop (f n))))))
|
|
|
|
(printf "direct closure recur~n")
|
|
(time
|
|
(let loop ([n 100000])
|
|
(unless (zero? n)
|
|
(loop ((lambda (x) (sub1 x)) n)))))
|
|
|
|
(printf "direct closure recur if~n")
|
|
(time
|
|
(let loop ([n 100000])
|
|
(if (zero? n)
|
|
(void)
|
|
(loop ((lambda (x) (sub1 x)) n)))))
|
|
|
|
(printf "let closure top-level~n")
|
|
(define loop
|
|
(let ([f (lambda (x) (sub1 x))])
|
|
(lambda (n)
|
|
(unless (zero? n)
|
|
(loop (f n))))))
|
|
(time (loop 100000))
|
|
|
|
(printf "direct closure top-level~n")
|
|
(define loop
|
|
(lambda (n)
|
|
(unless (zero? n)
|
|
(loop ((lambda (x) (sub1 x)) n)))))
|
|
(time (loop 100000))
|
|
|
|
|
|
; > (load "ltest.ss")
|
|
; cpu time: 1820 real time: 1826
|
|
; cpu time: 1420 real time: 1422
|
|
; cpu time: 1960 real time: 1957
|
|
; cpu time: 2630 real time: 2626
|
|
; > (load "ltest.ss")
|
|
; cpu time: 1790 real time: 1803
|
|
; cpu time: 1430 real time: 1468
|
|
; cpu time: 2150 real time: 2159
|
|
; cpu time: 2820 real time: 2824
|
|
|
|
; > (load "ltest.ss")
|
|
; nested loop
|
|
; cpu time: 1750 real time: 1817
|
|
; single loop
|
|
; cpu time: 1430 real time: 1425
|
|
; Y loop
|
|
; cpu time: 1500 real time: 1500
|
|
; let closure recur
|
|
; cpu time: 1830 real time: 1835
|
|
; direct closure recur
|
|
; cpu time: 1790 real time: 1791
|
|
; direct closure recur if
|
|
; cpu time: 1800 real time: 1793
|
|
; let closure top-level
|
|
; cpu time: 1810 real time: 1804
|
|
; direct closure top-level
|
|
; cpu time: 1760 real time: 1758
|