equal
deleted
inserted
replaced
19 |
19 |
20 (define f< <) |
20 (define f< <) |
21 (define f+ +) |
21 (define f+ +) |
22 (define f- -) |
22 (define f- -) |
23 |
23 |
|
24 (define kont (make-parameter '())) |
|
25 |
|
26 (define-syntax-rule (with-k x b) |
|
27 (parameterize ((kont (cons x (kont)))) b)) |
|
28 |
24 (define int% |
29 (define int% |
25 (class object% |
30 (class object% |
|
31 (define/public (benchfib/k n) |
|
32 (if (with-k 'if (< n 2)) |
|
33 1 |
|
34 (+ (with-k 'b1 (send this benchfib/k (with-k '-1 (- n 1)))) |
|
35 (with-k 'add (+ (with-k 'b2 (send this benchfib/k (with-k '-2 (- n 2)))) |
|
36 1))))) |
|
37 |
26 (define/public (benchfib* n k) |
38 (define/public (benchfib* n k) |
27 (send this <* n 2 |
39 (send this <* n 2 |
28 (lambda (is-lt-2) |
40 (lambda (is-lt-2) |
29 (if is-lt-2 |
41 (if is-lt-2 |
30 (k 1) |
42 (k 1) |
68 |
80 |
69 (module+ test |
81 (module+ test |
70 (check-equal? (send (make-object int%) benchfib 1) 1) |
82 (check-equal? (send (make-object int%) benchfib 1) 1) |
71 (check-equal? (send (make-object int%) benchfib 10) 177) |
83 (check-equal? (send (make-object int%) benchfib 10) 177) |
72 (check-equal? (send (make-object int%) benchfib* 10 values) 177) |
84 (check-equal? (send (make-object int%) benchfib* 10 values) 177) |
73 (check-equal? (send (make-object int%) benchfib** 10) 177)) |
85 (check-equal? (send (make-object int%) benchfib** 10) 177) |
|
86 (check-equal? (send (make-object int%) benchfib/k 10) 177)) |
74 |
87 |
75 (time (benchfib 28)) |
88 (time (benchfib 28)) |
76 (time (send (make-object int%) benchfib 28)) |
89 (time (send (make-object int%) benchfib 28)) |
77 (time (send (make-object int%) benchfib* 28 values)) |
90 (time (send (make-object int%) benchfib* 28 values)) |
78 (time (send (make-object int%) benchfib** 28)) |
91 (time (send (make-object int%) benchfib** 28)) |
|
92 (time (send (make-object int%) benchfib/k 28)) |