On Tue, Jul 31, 2012 at 11:09:30PM +0200, Felix wrote: > From: "Jeronimo Pellegrini" <j...@aleph0.info> > Subject: [Chicken-users] Printing procedures returned from call/cc > Date: Tue, 31 Jul 2012 09:59:44 -0300 > > > Hello, > > > > I was wondering why this happens in Chicken (recent checkout from git): > > > > (let ((lst (call/cc (lambda (x) > > (print 'something) > > (call/cc (lambda (y) > > (list x y))))))) > > (print lst) > > (print (eq? (car lst) (cadr lst))) > > (print (eqv? (car lst) (cadr lst))) > > > > ==> > > (#<procedure (f_10734 . results1838)> #<procedure (f_10734 . results1838)>) > > #f > > #f > > > > The procedures returned are different continuations (and of course > > they are certainly not eq? or eqv?). So I was wondering, then, why print > > (and write, etc) show the same names for them. I mean, they were printed > > from the same list, so in the same lexical context, and they are > > different... It's a bit confusing that they "look the same" when > > printed -- they wouldn't look the same if their names were something > > "generic" like "#<continuation>", but they actually have names that look > > like something generated by gensym. I'm probably missing something, but > > can't see exactly what. > > These procedures are internally generated and represent different > closure records but for the same piece of code. The printer for > closures will show something that relates to the code, not the > allocation or identity. The procedure-id shown here is admittedly > useless, though.
OK, I see! > Attached a patch that at least hints at what sort of procedure is > shown. If you find this in any way useful, I can add it to the > git repo. Well, the output certainly more informative with the patch than it was before! Thank you! J. _______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-users