On Jul 5, 2014, at 12:10 PM, Brian Adkins <[email protected]> wrote:
> I've modified the code with Matthias' feedback and a brief reading of the > style guide. I must have been confused on the use of "local". I got the > impression that it was required if you wanted to (define (foo arg ...)) > within another function, but I took it out, and everything works fine. Maybe > local is only required for circumstances that I haven't hit yet. The > rank-restaurants functions is nicer looking w/o the local. I’m pretty sure that local is never required for that in any circumstances. See http://lists.racket-lang.org/users/archive/2013-November/060352.html > Is match typically used to destructure lists? Match can be used for a lot of things, but (looking ahead) you might want to look at one of the match-lambda s: http://docs.racket-lang.org/reference/match.html?q=match-lambda#%28form._%28%28lib._racket%2Fmatch..rkt%29._match-lambda%29%29 Probably the one you want is either match-lambda* or maybe match-lambda**. > I used it a few times in the program, but in the following example, a couple > defines w/ second & third seemed better given the complexity of the nested > folds. I think nested folds are discouraged in favor of for loops: http://docs.racket-lang.org/style/Choosing_the_Right_Construct.html?q=match-lambda#%28part._.Traversals%29 By the way (to the rest of the list) is there something like a for/fold/contract that allows contracts in similar places as for for/fold in typed racket? Because for/fold made no sense to me until I tried for/lists and for/fold in typed racket, and types/contracts make it easier for me to wrap my head around what it’s doing (at least for this case). > (define (summed-history history) > (foldl (λ (3tuple hsh) > (define rest (second 3tuple)) > (define users (third 3tuple)) > (foldl (λ (user hsh) > (hash-set hsh (list user rest) (+ 1 (hash-ref hsh (list > user rest) 0)))) > hsh > users)) > (hash) > history)) > > vs. > > (define (summed-history history) > (foldl (λ (3tuple hsh) > (match 3tuple > [(list _ rest users) > (foldl (λ (user hsh) > (hash-set hsh > (list user rest) > (+ 1 (hash-ref hsh (list user rest) 0)))) > hsh > users)])) > (hash) > history)) > > What I'd really like is to replace the 3tuple arg with a pattern: > > (define (summed-history history) > (foldl (λ ((_ rest users) hsh) > (foldl (λ (user hsh) > (hash-set hsh (list user rest) (+ 1 (hash-ref hsh (list > user rest) 0)))) > hsh > users)) > (hash) > history)) I think one of the match-lambda s would be a good thing for that. http://docs.racket-lang.org/reference/match.html?q=match-lambda#%28form._%28%28lib._racket%2Fmatch..rkt%29._match-lambda%29%29 Probably the one you want is either match-lambda* or maybe match-lambda**. > > > Thanks, > Brian > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

