I think it works. I was trying to get you an extra line.
On May 25, 2010, at 8:48 PM, Matthew Flatt wrote: > At Tue, 25 May 2010 13:29:15 -0400, Danny Yoo wrote: >> ;; gets the unique lines, although not guaranteeing order: >> (let ([a-ht (for/fold ([a-ht #hash()]) >> ([line (in-lines (current-input-port))]) >> (hash-set a-ht line #t))]) >> (for ([line (in-hash-keys a-ht)]) >> (printf "~a~n" line))) > > I'd write that one as > > #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))) > > to preserve the order. Ok? > > Another possibility is > > #lang racket > ;; Report each unique line from stdin: > (for/fold ([saw (hash)]) ([line (in-lines)]) > (unless (hash-ref saw line #f) > (displayln line)) > (hash-set saw line #t)) > > but the result from `for/fold' isn't wanted, so an extra `void' wrapper > (or similar) would be needed. > > This program is currently the example of processing lines/strings with > `for' loop. It seems like a good representative of the set, because it > requires a bit more than just `awk'-like matching. > > >> #lang racket >> ;; Compute md5 checksum of the file given at the command line >> (require scheme/cmdline >> file/md5) >> (printf "~a~n" (md5 (command-line #:args (filename) filename))) > > I'm not sure about a program that mostly calls a function that has a > Unix command-line counterpart. The use of `command-line' is a good > idea, and it fits nicely with Carl's dice program... > > > At Tue, 25 May 2010 17:31:43 -0400, Carl Eastlund wrote: >> #lang racket >> (define rx #px"(\\d*)d(\\d+)([+-]\\d+|)") >> (match (current-command-line-arguments) >> [(vector (regexp rx (list _ dice sides mod))) >> (apply + (or (string->number mod) 0) >> (build-list (or (string->number dice) 1) >> (λ (i) (+ 1 (random (string->number sides))))))]) > > Impressively compact! But there's really a lot going on there. > > Dice make a good example for a simple command-line utility. Here's a > simpler program that is inspired by your example: > > #lang racket > ;; A dice-rolling command-line utility > (require racket/cmdline) > (command-line > #:args (sides dice) > (for ([i (in-range (string->number dice))]) > (displayln (random (string->number sides))))) > > > At Tue, 25 May 2010 17:15:11 -0400, Neil Van Dyke wrote: >> Regarding single-character identifiers... Given that Scheme standard >> identifiers tend to be verbose, and that many of these examples squeezed >> into 40x7 are one-liners in Perl anyway, maybe focusing on readability >> is a good idea. Maybe bump it up to as wide as 70x7. > > I'm willing to go a little wider --- wide enough for the Google > example, which is now added (based on Guillaume's version). > > > At Tue, 25 May 2010 14:51:15 -0600, Jon Rafkind wrote: >> Since all the code is extremely public can I make a strong request that >> variable names not be single letter characters? Some short word would be >> preferable. > > I fixed some unnecessarily short names. Others would either make the > program wider (e.g., in the GUI program) or don't seem to merit long > names (e.g., `i' as an index variable). > > _________________________________________________ > For list-related administrative tasks: > http://list.cs.brown.edu/mailman/listinfo/plt-dev _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev