MyStep - Trace execution steps of an algorithm
use Algorithm::Step; use integer; algorithm "P", "Print table of 500 primes"; my @PRIME = (); step 1, "Start table, PRIME[1] <- 2, PRIME[2] <- 3"; $PRIME[1] = 2; $n = 3; $j = 1; $PRIME[++$j] = $n; while ($j < 500) { step 2, "Advance n by 2"; $n += 2; step 3, "k <- 1"; $k = 1; do { step 4, "Increase k"; ++$k; step 5, "Divide n by PRIME[k]"; $q = $n / $PRIME[$k]; $r = $n % $PRIME[$k]; step 6, "Remainder zero?"; next if $r == 0; step 7, "PRIME[k] large?"; } while ($q > $PRIME[$k]); step 8, "n is prime"; $PRIME[++$j] = $n; } step 9, "Print result"; print "FIRST FIVE HUNDRED PRIMES\n"; $m = 1; do { for (0,50,100,150,200,250,300,350,400) { print $PRIME[$_+$m], "\t"; } print $PRIME[450+$m], "\n"; $m++; } while ($m <= 50); end_algorithm "P";
This is for observing the behavior of algorithms on some algorithm textbooks, such as `The Art of Computer Programming', `Introduction to Algorithms'. I write it only for fun. I have been thinking of how to embed documents in program in a helpful way.
The usage is well demonstrated by the example above.
Begins an algorithm. It takes two arguments. The first one is the name of this algorithm, the second one is the short description.
Ends an algorithm.
Increase count on this step by 1. It can be nested. A step can be divided into sub steps, like:
step 1, "desc"; step 1,1, "desc"; step 1,2, "desc"; step 2, "desc";
Print the execution information. If no argument is give, print to stdout. If a filename is given, print to that file.
statistics("prime.stat");
The output looks like:
STATISTICS Algorithm P: Print table of 500 primes STEP 1. Start table, PRIME[1] <- 2, PRIME[2] <- 3 .... [1] STEP 2. Advance n by 2 ............................... [1784] STEP 3. k <- 1 ....................................... [1784] STEP 4. Increase k ................................... [9538] STEP 5. Divide n by PRIME[k] ......................... [9538] STEP 6. Remainder zero? .............................. [9538] STEP 7. PRIME[k] large? .............................. [8252] STEP 8. n is prime ................................... [498] STEP 9. Print result ................................. [1]
Generate from comments. If a file `prime.pl' looks like:
... # algorithm P: Print first five hundred primes # step 5: Divide n by PRIME[k] # end algorithm P ...
Parse the comments, insert codes, and generate a new `step_prime.pl';
Surely there are many. This is still pre-alpha.
Chaoji Li <lichaoji@gmail.com>
Use it anyway you please.
To install Algorithm::Step, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Algorithm::Step
CPAN shell
perl -MCPAN -e shell install Algorithm::Step
For more information on module installation, please visit the detailed CPAN module installation guide.