On Wed, May 26, 2010 at 10:27 AM, Matthias Felleisen <matth...@ccs.neu.edu> wrote: > > On May 25, 2010, at 8:48 PM, Matthew Flatt wrote: > >> #lang racket >> ;; Report each unique line from stdin: >> (let ([saw (make-hash)]) >> (for ([line (in-lines)]) >> (unless (hash-ref saw line #f) >> (displayln line)) >> (hash-set! saw line #t))) > > I would prefer to sacrifice one line to avoid the repetition of the test > (leakage). I doubt Perl and friends do that: > > #lang racket > ;; Report each unique line from stdin: > (define saw (make-hash)) > (for ([line (in-lines)]) > (hash-ref saw line > (lambda () > (displayln line) > (hash-set! saw line #t))))
To anyone who isn't intimately familiar with hash-ref, both versions are kind of obscure; the second one more so. If you insist on the second one, though, use a lambda character and put the displayln on the same line and you'll be back to 7. Personally, I'd recommend a variant of the first that uses hash-has-key? instead of hash-ref. It'll be much more readable. --Carl _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev