[racket] arity of + versus <=
On Fri, Oct 28, 2011 at 2:04 PM, Joe Marshall <jmarshall at alum.mit.edu> wrote:
> 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?
You seem to be assuming that we have to pick one binary->nary for all
binary operators. I would choose this one for relations and the other
one for associative operators with identities. Other kinds of
operators may have other kinds of natural generalizations.
--Carl