(defmacro recursive ((. parm-init-pairs) . body) (let ((hidden-name (gensym "RECURSIVE-"))) ^(macrolet ((recurse (. args) ^(,',hidden-name ,*args))) (labels ((,hidden-name (,*[mapcar first parm-init-pairs]) ,*body)) (,hidden-name ,*[mapcar second parm-init-pairs]))))) (defun fib (number) (if (< number 0) (error "Error. The number entered: ~a is negative" number) (recursive ((n number) (a 0) (b 1)) (if (= n 0) a (recurse (- n 1) b (+ a b)))))) (put-line `fib(10) = @(fib 10)`) (put-line `fib(-1) = @(fib -1)`))