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