I did some studying on non-determinism.
An example of a non-deterministic algorithm is mergesort.
use sort '_mergesort';
my @sorted =
sort { substr($a, 0, 1) cmp substr($b, 0, 1) }
qw( foo bar baz );
It is guarantees that the results will the sorted, but the relative ordering of baz and bar is not specified. Therefore, mergesort is non-deterministic.
Let's see if we can replicate the same situation with the parser.
The goals of Perl's parser include the production of functions.
package Mod;
BEGIN {
my ($sub) =
map "sub { $_ }",
join ' ',
map "$_();",
sort { substr($a, 0, 1) cmp substr($b, 0, 1) }
qw( foo bar baz );
}
sub foo { print "$foo\n" };
sub bar { print "$bar\n" };
sub baz { print "$baz\n" };
1;
The parser produces a function that calls foo(), bar() and baz(), but the order in which the calls are organized is not specified. Therefore, the parser is non-deterministic.
I don't know what that means wrt Perl's parsability, since I don't know I don't know how that's defined.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.