On Oct 28, 2011, at 1:01 PM, Joe Marshall wrote:

> ... I was generalizing in a different way:
> 
> (define (binary-add a b) (+ a b))
> (define (binary-multiply a b) (* a b))
> 
> (define (binary->nary op base-case)
>  (lambda args (fold-left op base-case args))) ; *****

And as you point out correctly, this doesn't make sense for = or <=.  But the 
REASON it doesn't make sense is that = and <= have contract "number number -> 
boolean", whereas binary-add and binary-mult have contract "number number -> 
number".  If the return type of "op" isn't the same as the type of [at least 
one of] "op"'s arguments, the above approach to generalizing a binary operator 
to an n-ary operator can't work.

Since there is in fact a well-defined and useful meaning for "(= a b c d e)", 
to wit "all the numbers a, b, c, d, and e are equal," and a well-defined and 
useful meaning for "(<= a b c d e)", to wit "the sequence a, b, c, d, e is 
non-decreasing", it seems reasonable to implement these.


Stephen Bloch
sbl...@adelphi.edu


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

Reply via email to