On Monday, 22 February 2016 19:34:40 UTC-3, Jens Axel Søgaard  wrote:
> 2016-02-22 22:46 GMT+01:00 Federico Ramírez <fedek...@gmail.com>:
> 
> 
>     (define (tokenize input)
> 
>       (cond
> 
>         ((match-identifier input) (consume-identifier input))
> 
>         ((match-equals     input) (consume-equals     input))
> 
>         ((match-number     input) (consume-number     input))
> 
>         (else '())))
> 
> 
> 
> What bothers me is that it's calling the matchers twice for each token, which 
> isn't very good for performance and it's not pretty :p
> 
> 
> 
> You can use this strategy:
> 
> 
>     (define (tokenize input)
>       (cond
>         ((match-identifier input)    => (lambda (token) ... consume the 
> identifier token...))
>         ((match-equals     input)   => (lambda (token) ... consume the equals 
> token...))
>         ((match-number     input) => (lambda (token) ... consume the number 
> token...))
>         (else '())))
> 
>  
> Here a clause of the form [expression1 => expression2] will calls the result 
> of expression2
> with the result of expression1 as input. That is: when (match-identifier 
> input) returns a token
> the function (lambda (token) ... consume the identifier token...) will be 
> called with the token.
> Given the token you can find it's length n and then skip n bytes of the input 
> stream.
> 
> 
> -- 
> Jens Axel Søgaard

Oh, interesting! I feel like I'll use that quite a lot :) Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to