Simon Cozens wrote:

I don't understand this, on several levels. The lowest level on which
I don't understand it is that testing whether an array is full of threes:
        @array & 3
Err...that's not what that does. What you wrote creates a scalar value that
superimposes the scalar values C< \@array > and C< 3 >.

To test if an array is full of 3's you'd write:

	all(@array) == 3


makes sense, but how do you test if all of its elements are more than six?
        @array & { $^a > 6 } # ?
No. What you wrote is the superposition of C< \@array > and (effectively)
C< sub($a){$a>6} >.

To test if an array is full of greater-than-6's you'd write:

	all(@array) > 6


If you can't do the latter with the same operator as the former, why have
the operator at all?
The operator is for composing superpositions from separate elements. Such as:

	$x & $y & $z  ==  3	# all three variables equal 3
	$x & $y & $z  <   6	# all three variables greater than 6

	$x & $y | $z  <   6     # either $x and $y greater than 6, or $z greater than 6


Suddenly, @array.all?({ |$a| $a > 6 }) seems a lot more appealing. :)
More appealing than:

	all(@array) > 6

???

No wonder you put a smiley there. ;-)


Damian


Reply via email to