I'd expect them to run nearly the same due to inlining and constant propagation. If I save your program to "ex.rkt" and use
raco make ex.rkt raco decompile ex.rkt the the output looks almost the same for both functions. There's a lot of allocation in these programs, of course, and that's going to make benchmarking relatively tricky. How are you timing the functions, and does it matter whether you `run1` or `run2` first? At Mon, 16 Jun 2014 11:16:25 +0400, Roman Klochkov wrote: > Strange. > > #lang racket > (define (test1 x y) > (if x > (+ y 1) > (- y 1))) > (define (test2 x) > (if x > (λ (y) (+ y 1)) > (λ (y) (- y 1)))) > (define (run1 data) > (map (λ (x) (test1 #t x)) data)) > (define (run2 data) > (map (λ (x) ((test2 #t) x)) data)) I expect, that run2 should be faster, > because (test2 #t) returns const (lambda (y) (+ y 1)) and shouldn't be > checked > on every iteration. > > But in reality (time ...) gives 219 for run1 and 212 for run2. run2 is 1.5 > times slower! > > Why so? > > > -- > Roman Klochkov____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users