GNU bug report logs - #748
Elisp: lexical-let and cyclic structures

Previous Next

Package: emacs;

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


View this message in rfc822 format

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: 748 <at> debbugs.gnu.org
Subject: bug#748: Elisp: lexical-let and cyclic structures
Date: Wed, 20 Aug 2008 21:12:22 -0400
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 317 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.