Re: New release of SRFI 114 with implementation Kevin Wortman 09 Dec 2013 00:10 UTC
On 12/08/2013 09:01 AM, John Cowan wrote: > Kevin Wortman scripsit: > >> Returning the first tied argument seems like it would be a little more >> straightforward to implement, at least to me. But I'm comfortable with >> the current behavior. I don't think it matters much as long as the >> behavior is documented. > > Here's the current sample implementation (note that it depends on `apply` > calling its argument tail-recursively): > > (define comparator-min > (case-lambda > ((comparator a) > a) > ((comparator a b) > (if (<? comparator a b) a b)) > ((comparator a b . objs) > (comparator-min comparator a (apply comparator-min comparator b objs))))) > > (define comparator-max > (case-lambda > ((comparator a) > a) > ((comparator a b) > (if (>? comparator a b) a b)) > ((comparator a b . objs) > (comparator-max comparator a (apply comparator-max comparator b objs))))) > > Exactly what you get depends on which predicate you use, of course. Gotcha. I was thinking of the algorithm: scan each element and keep track of the smallest (resp. largest) element you've seen so far. Something like (untested): (define (comparator-min comparator first . rest) (fold (lambda (x least) (if (<? comparator x least) x least)) first rest)) Kevin Wortman