> 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 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users