On Fri, 1 Nov 2002, Damian Conway wrote:
: Austin Hastings wrote:
:
: > In the C that I learned, the &^| ops were bitwise.
: >
: > Likewise, the && || ops were lazy booleans.
: >
: > So what's a single-letter boolean act like? Is it lazy? Does it retain
: > its bitwise-ness but (since boolean) force evaluation for 1 or 0 first?
: > I just don't understand what the "implied" behavior is, since the
: > reference is outside my experience.
:
: Since they're producing a boolean result, both C<?&> and C<?|> could be
: implemented lazily. However, I suspect they mightn't be, just to keep
: them consistent (in their evaluation of operands) with the other bitwise
: ops.
What you're saying is correct, except that I don't think we should
be confusing "lazy" with "short-circuit". A lazy operator wouldn't
evaluate *either* side until it jolly well had to. If you say
() = 1..Inf;
it shouldn't even try to produce a 1.
I don't much care whether they short-circuit or not. I could argue it
either way. I think it'd be okay if they short-circuit. Anybody who
uses an operator like ?& expecting it to force a side effect on the
second expression is nuts. And there's something (though not much)
to be said for having an exact equivalent for C's && operator.
Larry