That works fine (i.e., does not get changed to `in-value'). Matching `set' as a literal in `syntax-case' works by identifier binding, not symbolically. If `set' has a different binding than the one exported by the module, then the optimizing case doesn't match.
At Thu, 29 Nov 2012 10:49:15 +0100, Tobias Hammer wrote: > What about > > (let ([set (lambda (a) (set 1 2 a))]) > (for/list ([x (in-set (set 3))]) > x)) > > ? > > Tobias > > > On Wed, 28 Nov 2012 19:24:12 +0100, J. Ian Johnson <i...@ccs.neu.edu> > wrote: > > > Cool. I submitted a pull request with this change since it's always an > > improvement. > > Thanks, > > -Ian > > ----- Original Message ----- > > From: "Matthew Flatt" <mfl...@cs.utah.edu> > > To: "J. Ian Johnson" <i...@ccs.neu.edu> > > Cc: "dev" <dev@racket-lang.org> > > Sent: Wednesday, November 28, 2012 12:58:09 PM GMT -05:00 US/Canada > > Eastern > > Subject: Re: [racket-dev] for loop singleton optimization > > > > I think that would be an ad hoc optimization in each `in-'. For example, > > > > (define-sequence-syntax *in-set > > (lambda () #'in-set) > > (lambda (stx) > > (syntax-case stx () > > [[(id) (_ st)] > > .... > > > > in `racket/set' could change to > > > > (define-sequence-syntax *in-set > > (lambda () #'in-set) > > (lambda (stx) > > (syntax-case stx (set) > > [[(id) (_ (set v))] > > #`[(id) (in-value v)]] > > [[(id) (_ st)] > > .... > > > > > > At Wed, 28 Nov 2012 12:50:49 -0500 (EST), "J. Ian Johnson" wrote: > >> It would be great to optimize singletons out of comprehensions, since I > >> (and > >> probably others) have macros that expand into singleton constructors > >> that are > >> much better suited to just be a rebinding. > >> > >> > (time (for ([n (in-range 1 1000000)]) (for ([k (in-set (set n))]) > >> (random > >> k)))) > >> cpu time: 340 real time: 338 gc time: 16 > >> > (time (for ([n (in-range 1 1000000)]) (for ([k (in-value n)]) (random > >> k)))) > >> cpu time: 120 real time: 118 gc time: 0 > >> > >> Is this easily added to for.rkt? > >> > >> -Ian > >> _________________________ > >> Racket Developers list: > >> http://lists.racket-lang.org/dev > > _________________________ > > Racket Developers list: > > http://lists.racket-lang.org/dev > > > -- > --------------------------------------------------------- > Tobias Hammer > DLR / Institute of Robotics and Mechatronics > Muenchner Str. 20, D-82234 Wessling > Tel.: 08153/28-1487 > Mail: tobias.ham...@dlr.de _________________________ Racket Developers list: http://lists.racket-lang.org/dev