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