[racket] syntax, differently
> I'd also like to push for earlier introduction of (local ...) in
> HtDP/2e. We all know that code duplication is a bad thing and that
> giving complex constructs names is one of the easiest forms of
> abstraction, but we can't use local definitions to handle these cases
> until we've already done a lot of really complicated stuff. I'd like
> to be able to contrast:
>
> (define (distance p1 p2)
> (sqrt (+ (sqr (- (posn-x p1) (posn-x p2)))
> (sqr (- (posn-y p1) (posn-y p2))))))
>
> and
>
> (define (distance p1 p2)
> (local
> [(define x1 (posn-x p1))
> (define y1 (posn-y p1))
> (define x2 (posn-x p2))
> (define y2 (posn-y p2))]
> (sqrt (+ (sqr (- x1 x2)) (sqr (- y1 y2))))))
>
> fairly early, so that I can emphasize that, while the first has fewer
> keystrokes, the latter is easier for most people to read.
>
(define (distance p1 p2) (distance-helper (posn-x p1) (posn-y p1)
(posn-x p2) (posn-y p2)))
(define (distance-helper x1 y1 x2 y2) (sqrt (+ (sqr (- x1 x2)) (sqr (-
y1 y2)))))
What exactly does local contribute here? I am not convinced that more
syntax and the thorny-for-students semantics of local is really what
is needed.
--
Cheers,
Marco