Chaoji Li >
Algorithm-Step-0.02 >
MyStep

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.

**algorithm**-
Begins an algorithm. It takes two arguments. The first one is the name of this algorithm, the second one is the short description.

**end_algorithm**-
Ends an algorithm.

**step**-
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";

**statistics**-
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.

syntax highlighting: