On Fri, Oct 28, 2011 at 10:58 AM, Stephen Bloch <sbl...@adelphi.edu> wrote:
>
> OK, here's a variant of "binary->nary" that produces the results we want when 
> "op" has contract "X X -> boolean" rather than "X X -> X"
>
> (define (binary->nary relop)
>   (letrec ((f (lambda args
>                 (or (empty? args)
>                     (empty? (rest args))
>                     (and (relop (first args) (second args))
>                          (apply f (rest args)))))))
>     f))
>
> This applies relop to each successive (overlapping) pair of elements and 
> "and"s the results.

Yes!  Thank you!

Of course this fails for n-ary add and multiply, but presumably a
person who preferred
this generalization would have to answer the dual question of the
original poster:
Why do the relational operators generalize to 0 or 1 arguments but addition and
multiplication do not?



-- 
~jrm

_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to