X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FSub%2FNary.pm;h=ec00eb18a72e3280c048cda6b7f2e75ed63dfd68;hb=157f26dab3f210aee4c9a2d4c90230e2af3b0713;hp=eaa378e1aead72279fdf2231aff9c5584a2e18e1;hpb=c2cd664de815b04c82497a649abd06b3dd9e8711;p=perl%2Fmodules%2FSub-Nary.git diff --git a/lib/Sub/Nary.pm b/lib/Sub/Nary.pm index eaa378e..ec00eb1 100644 --- a/lib/Sub/Nary.pm +++ b/lib/Sub/Nary.pm @@ -59,7 +59,9 @@ The probability is computed as such : =over 4 -=item * When branching, each branch is considered equally possible. +=item * + +When branching, each branch is considered equally possible. For example, the subroutine @@ -85,7 +87,9 @@ As for it is considered to return C<3> scalars with probability C<1/2>, C<2> with probability C<1/2 * 1/2 = 1/4> and C<1> (when the two tests fail, the last computed value is returned, which here is C<< $x > 0.9 >> evaluated in the scalar context of the test) with remaining probability C<1/4>. -=item * The total probability law for a given returning point is the convolution product of the probabilities of its list elements. +=item * + +The total probability law for a given returning point is the convolution product of the probabilities of its list elements. As such, @@ -101,11 +105,15 @@ returns C<3> or C<4> arguments with probability C<1/2> ; and never returns C<1> argument but returns C<2> with probability C<1/2 * 1/2 = 1/4>, C<3> with probability C<1/2 * 1/2 + 1/2 * 1/2 = 1/2> and C<4> with probability C<1/4> too. -=item * If a core function may return different numbers of scalars, each kind is considered equally possible. +=item * + +If a core function may return different numbers of scalars, each kind is considered equally possible. For example, C returns C<13> elements on success and C<0> on error. The according probability will then be C<< { 0 => 0.5, 13 => 0.5 } >>. -=item * The C state is absorbing in regard of all the other ones. +=item * + +The C state is absorbing in regard of all the other ones. This is just a pedantic way to say that "list + fixed length = list". That's why @@ -230,7 +238,6 @@ sub enter { my $r = add $self->inspect($op->first); shift @{$self->{cv}}; - $r = { $r => 1 } unless ref $r; $self->{cache}->{$tag} = { %$r }; return undef, $r; } @@ -344,11 +351,9 @@ sub pp_entersub { my ($self, $op) = @_; $op = $op->first while $op->flags & OPf_KIDS; - return undef, 0 if null $op; - if (name($op) eq 'pushmark') { - $op = $op->sibling; - return undef, 0 if null $op; - } + # First must be a pushmark + $op = $op->sibling; + # Next must be non null - at worse it's the rv2cv my $r; my $c = 1; @@ -601,7 +606,7 @@ L (standard since perl 5), L (since perl 5.005) and L (since Vincent Pit, C<< >>, L. -You can contact me by mail or on #perl @ FreeNode (vincent or Prof_Vince). +You can contact me by mail or on C (vincent). =head1 BUGS