On Friday, July 28, 2017 at 2:02:56 AM UTC+2, gustavo wrote:
> I agree with the in-list explanation, but I want to remark a few details.
> 
> >> I don't really understand the (in-list ...) thing. This seems to be 
> >> internal magic to me.
> 
> `in-list` is not a function, it's a macro that looks like a function.
> `for` is another macro (that doesn't look like a function). But in
> Racket the macros are not just straightforward text substitution, they
> can do a lot of things. Most are simple, but some macros are very
> complex. For example `for` can examine some additional information
> stored in `in-list` and write very efficient code. I.e. magic, a lot
> of magic, but you can write your own magical `in-something`. The
> details are in https://docs.racket-lang.org/reference/for.html but
> it's not easy so I recommend reading it later after playing more with
> the simple macros.
> 
> I looked at your solution with vectors. I think that vectors are not
> slower than lists, moreover, they should be slightly faster, but
> sometimes I guess wrong. The problem with your implementation is that
> it creates a lot of intermediate lists. For example in
>    (apply + (map (lambda (class-label) ...) class-labels)
> The intermediate list must be allocated and free after use, the values
> are scattered in memory so it may be slower to use them.
> 
> Also, the compiler can write more efficient code for the + in (+ x y)
> than for the + in (apply + ...).
> 
> The solution of Daniel use (for/sum ...) instead of (apply + (map ...)).
> 
> There are a few places that can be rewritten. My recommendation for
> fast code is to try to avoid allocations when possible.
> 
> Gustavo

Thanks, will try to get it done soon! I also don't like the readability aspect 
of some part of code I have, like the nested map summing and initially already 
thought that there must be something better available. It's Racket after all. 
So thanks for pointing it out.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to