yes it is: (define thunk1 (lambda () (/ 100 10))) (define thunk2 (lambda () (eval '(/ 100 10)))) (define iterate (lambda (ct thunk) (if (zero? ct) #t (begin (thunk) (iterate (- ct 1) thunk)))))
(time (iterate 1000000 thunk1)) => cpu time: 15 real time: 16 gc time: 0 (time (iterate 1000000 thunk2)) => cpu time: 21110 real time: 21125 gc time: 436 ----- Original Message ----- From: Joe Gilray To: Racket mailing list Sent: Thursday, July 19, 2012 7:15 AM Subject: [racket] Is eval very slow? Hi, I've written some code that uses eval: (define ops (list * / + -)) (define digits '(1 2 3 4 5)) (for ([dl (combinations 4 digits)]) (define lst '()) (for ([d (permute-all dl)]) (for* ([o1 ops] [o2 ops] [o3 ops]) (unless (and (eq? o1 /) (zero? (eval (list o2 (second d) (list o3 (third d) (fourth d)))))) ; avoid divide by zero (define val (eval (list o1 (first d) (list o2 (second d) (list o3 (third d) (fourth d)))))) (when (>= val 1) (set! lst (cons val lst)))) ... It runs very, very slowly. Am I doing something wrong? Is there a way to speed up eval? Thanks, -Joe ------------------------------------------------------------------------------ ____________________ Racket Users list: http://lists.racket-lang.org/users
____________________ Racket Users list: http://lists.racket-lang.org/users