I've mistyped. In fact things are even worse. #lang racket (define-syntax U (syntax-rules () [(_ f) (f f)])) (define-syntax define/comb (syntax-rules () [(_ comb name (arg . args) f) (define name (comb (λ (name) (λ (arg . args) f))))]))
(define (Z f) (U (λ (g) (λ x (apply (f (U g)) x))))) (define/comb Z comb-sum (l t) (if (empty? l) t (comb-sum (rest l) (+ t (first l))))) (define (sum l t) (if (empty? l) t (sum (rest l) (+ t (first l))))) (time (comb-sum (make-list 10000000 1) 0)) (time (sum (make-list 10000000 1) 0)) Result: cpu time: 9922 real time: 10007 gc time: 3323 10000000 cpu time: 2762 real time: 2783 gc time: 469 10000000 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users