[racket] arity of + versus <=

From: Joe Marshall (jmarshall at alum.mit.edu)
Date: Fri Oct 28 14:04:45 EDT 2011

On Fri, Oct 28, 2011 at 10:58 AM, Stephen Bloch <sbloch at 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



Posted on the users mailing list.