[racket] arity of + versus <=
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