Groups | Search | Server Info | Login | Register
Groups > gnu.emacs.help > #60996
| From | steve g <sgonedes1977@gmail.com> |
|---|---|
| Newsgroups | gnu.emacs.help |
| Subject | Re: TCO with named-let via macros |
| References | <m11q42e6zz.fsf@void.com> <8734oi5ksx.fsf@axel-reichert.de> <m1ttgxhkp3.fsf@void.com> <87ed6wjffl.fsf@gmail.com> <87y154m645.fsf@axel-reichert.de> |
| Date | 2024-08-11 14:56 -0400 |
| Message-ID | <87bk1y51nw.fsf@gmail.com> (permalink) |
Axel Reichert <mail@axel-reichert.de> writes: > steve g <sgonedes1977@gmail.com> writes: > < > check the elisp manual. it shows how to implement true tail recursion < > in emacs. < > < > (defun elisp-sum (args) < > (elisp-sum-aux args 0)) < > < > (defun elisp-sum-aux (args res) < > (if (null args) < > res < > (elisp-sum-aux (cdr args) (+ (car args) res)))) < > < > you can byte compile it. very simple. > > ... and then easily find out that it will enter the debugger for large > ARGS, say > > (defun elisp-sum (number-sequence 1 10000000)) I was thinking more of the concept; no more than that. (elisp-sum (number-sequence 1 107)).. there is a limit to list length; that is usually time. > But with > > (defmacro defun-tco (name args body) > "Wraps a 'named-let' around BODY to have a TCO of function NAME with ARGS." > (declare (indent defun)) > (let ((bindings (gensym))) > (setq bindings (mapcar #'(lambda (arg) (list arg arg)) args)) > `(defun ,name ,args > (named-let ,name ,bindings > ,body)))) > yes, yes; lambda bindings will certainly work better. even in common lisp there is a limit to the length of &rest arguments and can take some time to process large lists; sometimes crashing the stack. If you are interested in non-deterministic software then screamer is fairly cool. > and > > (defun-tco elisp-sum-aux (args res) > (if (null args) > res > (elisp-sum-aux (cdr args) (+ (car args) res)))) > > a > (defun elisp-sum (number-sequence 1 10000000)) > > will do. this is probably the best option - just mentioning that recursion does work fairly well in emacs lisp... > > Best regards same > Axel
Back to gnu.emacs.help | Previous | Next — Previous in thread | Next in thread | Find similar
thanks - calculate pi fn. in elisp Richard Smith <null@void.com> - 2024-07-09 19:48 +0100
TCO with named-let via macros (was: thanks - calculate pi fn. in elisp) Axel Reichert <mail@axel-reichert.de> - 2024-07-09 23:15 +0200
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2024-07-10 06:28 +0100
Re: TCO with named-let via macros steve g <sgonedes1977@gmail.com> - 2024-08-10 15:56 -0400
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2024-08-10 22:28 +0100
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2024-07-10 06:36 +0100
Re: TCO with named-let via macros steve g <sgonedes1977@gmail.com> - 2024-08-10 16:22 -0400
Re: TCO with named-let via macros Axel Reichert <mail@axel-reichert.de> - 2024-08-10 23:15 +0200
Re: TCO with named-let via macros steve g <sgonedes1977@gmail.com> - 2024-08-11 14:56 -0400
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2025-04-08 10:26 +0100
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2024-07-10 06:59 +0100
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2024-07-10 09:18 +0100
Re: TCO with named-let via macros steve g <sgonedes1977@gmail.com> - 2024-08-10 16:26 -0400
Re: TCO with named-let via macros Richard Smith <null@void.com> - 2024-08-10 22:51 +0100
csiph-web