On Thu, Oct 14, 2010 at 2:10 PM, Vincent St-Amour <stamo...@ccs.neu.edu> wrote: > At Thu, 14 Oct 2010 13:56:16 -0300, > namekuseijin wrote: >> (all-d (filter ns (lambda (n) (char=? n d)))) >> (all-but-d (filter ns (lambda (n) (not (char=? n d)))))) > > Sounds like a job for partition. > > http://doc.racket-lang.org/reference/pairs.html?q=partition#%28def._%28%28lib._racket/list..rkt%29._partition%29%29
yes, after I've gone through this algorithm, I devised a version using partition instead. Here's mine, in portable scheme: (define (partition f ls) (if (null? ls) (pair ls ls) (let ((p (partition f (rest ls)))) (if (f ls) (pair (pair (first ls) (first p)) (rest p)) (pair (first p) (pair (first ls) (rest p))))))) in single-threaded strict scheme, it should be faster than the version I provided, since it iterates the list at once for both results. But: 1) my code above is purely functional and providing a scheme implementation would take advantage of that, it could process both let clauses in parallel 2) filter makes it more readable and immediately understandable than partition _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users