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

Reply via email to