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