I'd write a helper function like this: (define (has? str) (equal? str (get-text start-pos (+ start-pos (string-length str)))))
and call it a bunch (inside an 'or', one branch for each of those strings that are currently in the second argument to member; or well, even use a for/or, I guess). Or, if you wanted, you could change your existing code to push the 'or' inside the 'and' and then drop the promise. I also don't know why calling forward-match is that expensive. Probably worth following up a little there, I agree. Robby On Mon, Nov 26, 2012 at 12:45 PM, Danny Yoo <d...@hashcollision.org> wrote: > > On Mon, Nov 26, 2012 at 11:31 AM, Robby Findler > <ro...@eecs.northwestern.edu> wrote: >> >> That kind of thing makes a lot of sense to me. >> >> I'd probably write the code a little bit differently, having a >> function that takes a string and sees if the text starting at >> start-pos matches that string instead of having to special case the >> numbers 1, 2, 3, 5, and 7. This will also let you just put the call to >> forward-match in the second arm of the 'and', so you can avoid the >> promise. >> > > > Can you elaborate what you mean? Do you mean to say to do: > > (get-text pos (min (last-position) (+ pos K))) > > for sufficiently large enough K, and then do the string matching from there? > > > Also do you have an intuition as to why forward-match is expensive? My > understanding is that it only tokenizes the portion of the buffer that got > dirty, so there should be so much reuse of the existing tokens that this > shouldn't be that bad. I guess I need to stare at the code some more. _________________________ Racket Developers list: http://lists.racket-lang.org/dev