racket: 
Welcome to Racket v5.2.1.
> (define (cycle-length n)
    (cond
      [(= n 1)
       1]
      [(odd? n)
       (add1 (cycle-length (add1 (* 3 n))))]
      [(even? n)
       (add1 (cycle-length (/ n 2)))]))

(time (for ([i (in-range 1 1000000)])
          (cycle-length i)))
> 
cpu time: 15016 real time: 15018 gc time: 0

sbcl:

(defun cycle-length(n)
 (cond ((= n 1) 1)
       ((oddp n) (1+ (cycle-length (1+ (* 3 n)))))
       ((evenp n) (1+ (cycle-length (/ n 2))))))


* (time (loop for i from 1 to 1000000 do (cycle-length i)))

Evaluation took:
  6.192 seconds of real time
  6.192387 seconds of total run time (6.192387 user, 0.000000 system)
  100.00% CPU
  14,496,643,427 processor cycles
  0 bytes consed


With optimizations:

(defun cycle-length(n)
  (declare (fixnum n)
           (ftype (function (fixnum) fixnum) cycle-length)
           (optimize (speed 3) (safety 0) (compilation-speed 0)))
  (cond ((= n 1) 1)
        ((oddp n) (the fixnum (1+ (cycle-length
                                   (the fixnum (1+ (the fixnum (* 3 n))))))))
        ((evenp n) (cycle-length (the fixnum (/ n 2))))))

CL-USER> (time (loop for i from 1 to (expt 10 6) do (cycle-length i)))
Evaluation took:
  3.515 seconds of real time
  3.524220 seconds of total run time (3.524220 user, 0.000000 system)
  100.26% CPU
  8,228,949,701 processor cycles
  33,008 bytes consed

So racket = 15 seconds
    sbcl  =  6 seconds
sbcl optimized = 3.5 seconds.


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to