I was under the impression that internal defines expanded into letrec*, since csi runs and gives 4 for the sample (and using 'expand' was no help). Would it be reasonable, then, to request that csi have the same behavior and for csc to give a meaningful error when it detects this? (Or for internal defines to be letrec* a la R6RS?)
Much thanks, Eric On Mon, Feb 7, 2011 at 5:15 AM, Felix <fe...@call-with-current-continuation.org> wrote: > From: Eric Jiang <erji...@indiana.edu> > Subject: [Chicken-users] Internal defines broken when compiled? > Date: Fri, 4 Feb 2011 11:47:18 -0500 > >> Hi all, >> I wrote a procedure with several internal defines, and am running into >> problems with the compiled program. Running the compiled program >> gives an "unbound variable" error for a Chicken-generated variable. >> >> The following snippet reproduces the error: >> >> (define (x) >> (define (foo) (length bar)) >> (define bar `(1 2 3 ,foo)) >> (foo)) >> >> (x) ;; should give 4 >> >> However, this example works when interpreted in csi and petite. I >> searched the manual for some indication of whether this behavior in >> csc is documented, but did not turn up anything. >> > > This is invalid Scheme code: the internal defines are converted > into a `letrec' form and in a `letrec', the right-hand-side expressions > may not refer directly to the bound variables: > > (letrec ((foo ...) > (bar foo)) ; illegal > ...) > > (letrec ((foo ...) > (bar (lambda ... foo ...))) ; ok > ...) > > > cheers, > felix > _______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users