17 lines
570 B
Plaintext
17 lines
570 B
Plaintext
(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)`))
|