[racket-dev] 2htdp/image Feature Suggestion
In the recommendations of http://docs.racket-lang.org/style/index.html it is
recommended to use (internal or module top-level) define rather than named
let.
I use named let a lot. How would you rewrite the following? For me it is
rather difficult to make the change without loosing track of the scope of
the variables. I also have a rather distinct way of indenting.
#lang racket
#|
A rearrangement of a list L is a list with the same elements as L,
but possibly in another order.
Proc make-natural->rearrangement takes a list L and returns a proc.
Let N be the number of distinct rearrangements of L.
The returned proc takes an index K less than N and returns the K-th
distinct rearrangement of L. Two rearrangements R0 and R1 are distinct if
(not (andmap EQ? R0 R1)).
EQ? must be an equivalence relation on the elements of L.
E = element
H = head of L
T = tail of L (append H T) = L
K = index
N = nr of distinct rearrangements of L.
|#
(define (make-natural->rearrangement L (EQ? equal?))
(let ((N (nr-of-rearrangements L EQ?)))
(lambda (K)
(let rearrange ((L L) (K K) (N N) (result '()))
; Look for the K-th rearrangement of L and put it's elements in result.
(if (null? L) result
(let pseudo-rotate ((H L) (T '()) (K K))
; Look in subsequent pseudorotations.
(let ((E (car H)) (H (cdr H)))
(if (member E T EQ?)
; Skip pseudorotation if it's car already was car of a previous one.
(pseudo-rotate H (cons E T) K)
(let ((M (/ (* N (count-occurrences E L EQ?)) (length L))))
; M is the nr of rearrangements of (append H T)
; computed by means of a recurrent relation.
(if (< K M)
; The rearrangement is in this pseudorotation.
(rearrange (append H T) K M (cons E result))
; The rearrangement is not in this pseudorotation.
; Look in the following pseudorotation, but decrease K by the
; nr of rearrangements of the skipped pseudorotation.
(pseudo-rotate H (cons E T) (- K M))))))))))))
(define (nr-of-rearrangements L EQ?) ...)
(define (count-occcurrences E L EQ?) ...)
> -----Original Message-----
> From: dev [mailto:dev-bounces at racket-lang.org] On Behalf Of
> Asumu Takikawa
> Sent: lunes, 23 de junio de 2014 7:35
> To: Kevin Forchione
> Cc: dev at racket-lang.org
> Subject: Re: [racket-dev] 2htdp/image Feature Suggestion
>
> On 2014-06-22 20:27:21 -0700, Kevin Forchione wrote:
> > Thanks! Is there any documentation or guide on which
> *styles* to prefer in
> > writing Racket code? I find myself scratching my head at
> times in these
> > matters!
>
> In recent Racket distributions and online docs there's now a style
> manual:
>
> http://docs.racket-lang.org/style/index.html
>
> Cheers,
> Asumu
> _________________________
> Racket Developers list:
> http://lists.racket-lang.org/dev