GNU bug report logs -
#748
Elisp: lexical-let and cyclic structures
Previous Next
Reported by: michael_heerdegen <at> web.de
Date: Wed, 20 Aug 2008 14:05:05 UTC
Severity: normal
Tags: wontfix
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #10 received at 748 <at> emacsbugs.donarmstrong.com (full text, mbox):
tag +748 wontfix
thanks
> When using the reader constructs `#N=' and `#N#' for cyclic
> structures, lexical-let sometimes produces errors which don't occur
> with let.
Most programming languages do not accept infinite programs. Elisp is
no exception. The fact that you can build cyclic abstract syntax trees
and that they sometimes get evaluated correctly is just an accident.
I.e. if it hurts, don't do it.
> (defun f (start)
> (lexical-let (start start) ;; return a closure
> #1=(lambda (x) (if (= x start) x
> (+ x (#1# (1- x)))))))
For this case, I'd recommend to make the recursion explicit, e.g.:
(defun f (start)
(lexical-let ((start start)) ;; return a closure
(labels ((loop (x) (if (= x start) x
(+ x (loop (1- x))))))
loop)))
-- Stefan
This bug report was last modified 13 years and 345 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.