On Fri, Oct 28, 2011 at 12:07 PM, John Clements <cleme...@brinckerhoff.org> wrote: > > On Oct 28, 2011, at 8:12 AM, Joe Marshall wrote: > >> On Wed, Oct 26, 2011 at 8:32 PM, Dan Grossman <d...@cs.washington.edu> wrote: >>> Very minor point, but is there a rationale beyond historical precedent >>> for + and * to allow any number of arguments but, =, <=, <, >, >= to >>> require at least two arguments? >> >> 0 is the additive identity. 1 is the multiplicative identity. >> What is the equality identity? > > No, I don't buy that. operators in \alpha X \alpha -> \beta can never have > identities, but that doesn't mean they can't be generalized. > > I can definitely imagine that you would choose to disallow unary use of > comparison operations to prevent a certain class of programming errors, but > it seems pretty clear to me that the generalization of, e.g., <= is "is every > sequential pair of items in the argument list related by the given operator." > > Am I missing something here? > > John
Furthermore, that generalization is useful, as it makes (apply <= xs) into a simple implementation of "is xs monotonically non-decreasing?", just as (apply + xs) implements "the sum of the elements of xs". If <= must accept 2 or more arguments (or even 1 or more), that does not work for all lists. Personally, I'd prefer if <= and friends were generalized. It seems more in tune with Racket's permissive Scheme heritage -- if append accepts "improper" lists, + mixes precise numbers with floating point, and all values act as booleans, why can't <= accept 0 or 1 arguments? --Carl _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users