|
Location : Home > Languages > Perl > Package Title : Algorithm::Step - Trace execution steps of an algorithm |
![]() |
Algorithm::Step - アルゴリズムを段階を追って実行
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";
これは "The Art of Computer Programming" や "Introduction to Algorithms" のようなアルゴリズムのテキストにあるアルゴリズムの振る舞いを観察するためのものである。
私は自分の楽しみのためだけに書いた。私はいかにプログラムの中に助けになる方法でドキュメントを埋め込むかを考えていた。
利用方法は上の使用例に示されている。
algorithm
アルゴリズムを開始する。引数は2つで、1つめはアルゴリズム名、2つめはその短い説明である。
end_algorithm
アルゴリズムを終了する。
step
ステップごとに1ずつインクリメントする。ネストすることも可能。ステップはサブステップに分解することも可能である。
step 1, "desc"; step 1,1, "desc"; step 1,2, "desc"; step 2, "desc";
statistics
実行結果に関する情報を出力する。もし何も指定されなければ標準出力に出力する。ファイル名が指定されればそのファイルに出力する。
statistics("prime.stat");
出力ファイルは以下のようになる。
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]
コメントから生成すること。もしファイル prime.pl が以下のような内容であれば
... # algorithm P: Print first five hundred primes # step 5: Divide n by PRIME[k] # end algorithm P ...
コメントをパースし、コードを挿入し、新しい step_prime.pl を生成する。
いっぱいあるだろう。まだα版以前だ。
Chaoji Li, <lichaoji@gmail.com>
好きなように使ってくれ。
![]() |
Updated : 2006/07/25 |