(defun my-fast-fib (n) (declare (optimize (safety 0) (debug 0) (speed 3)) ; Give me C-level safety please (type fixnum n)) ; Type declaration (let* ((fib1 1) (fib2 1) (i 2) (fibo fib1)) (declare (type fixnum fib1 fib2 i fibo)) (loop while (< i n) do (setf fibo (the fixnum (+ fib1 fib2)) ; There are macros that ensure that we use fixnum versions of +, 1+, *, etc. this would let us skip the THE fib1 fib2 fib2 fibo i (the fixnum (1+ i)))) fibo))