Anonymous recursion: Difference between revisions

Content added Content deleted
No edit summary
(→‎{{header|TXR}}: Drop @(do ...))
Line 2,045: Line 2,045:
{{trans|Common_Lisp}}
{{trans|Common_Lisp}}


<lang txr>(defmacro recursive ((. parm-init-pairs) . body)
<lang txr>@(do
(let ((hidden-name (gensym "RECURSIVE-")))
(defmacro recursive ((. parm-init-pairs) . body)
(let ((hidden-name (gensym "RECURSIVE-")))
^(macrolet ((recurse (. args) ^(,',hidden-name ,*args)))
^(macrolet ((recurse (. args) ^(,',hidden-name ,*args)))
(labels ((,hidden-name (,*[mapcar first parm-init-pairs]) ,*body))
(labels ((,hidden-name (,*[mapcar first parm-init-pairs]) ,*body))
(,hidden-name ,*[mapcar second parm-init-pairs])))))
(,hidden-name ,*[mapcar second parm-init-pairs])))))


(defun fib (number)
(defun fib (number)
(if (< number 0)
(if (< number 0)
(error "Error. The number entered: ~a is negative" number)
(error "Error. The number entered: ~a is negative" number)
(recursive ((n number) (a 0) (b 1))
(recursive ((n number) (a 0) (b 1))
(if (= n 0)
(if (= n 0)
a
a
(recurse (- n 1) b (+ a b))))))
(recurse (- n 1) b (+ a b))))))


(put-line `fib(10) = @(fib 10)`)
(put-line `fib(10) = @(fib 10)`)
(put-line `fib(-1) = @(fib -1)`))</lang>
(put-line `fib(-1) = @(fib -1)`))</lang>


{{out}}
{{out}}