2

Agda プログラミング言語の速度をTcl スクリプト言語と比較するために、小さな速度テストを実行しています。これは科学的な作業のためのものであり、これは単なる事前テストであり、実際のテストではありません。とにかく、現実的な速度比較を実行しようとしているわけではありません!

私は、Agda が Tcl よりも 10 倍高速であるという小さな例を考え出しました。この例を使用する特別な理由があります。私の主な懸念は、私の Tcl コードが正しくプログラムされていないことです。これが、この例で Tcl が Agda よりも遅い唯一の理由です。

コードの目的は、整数のリストを表す行を解析し、それが実際に整数のリストであるかどうかを確認することです。
例 " (1,2,3)" は有効なリストです。
例 " (1,a,3)" は有効なリストではありません。

私の入力はファイルで、ファイルの 3 行目 (3 行目) ごとにチェックします。いずれかの行が整数のリストでない場合、プログラムは " false" を出力します。

私の入力ファイル:

(613424,505980,317647,870930,75580,897160,716297,668539,689646,196362,533020)


(727375,472272,22435,869407,320468,80779,302881,240382,196077,635360,568517)


(613424,505980,317647,870930,75580,897160,716297,668539,689646,196362,533020)

(ただし、実際のテスト ファイルは約 3 メガバイトです)

この問題を解決するための現在の Tcl コードは次のとおりです。

package require Tcl 8.6

proc checkListNat {str} {
    set list [split [string map {"(" "" ")" ""} $str] ","]
    foreach l $list {
        if {[string is integer $l] == 0} {
            return 0
        }
    }
    return 1
}

set i 1
set fp [open "/tmp/test.txt" r]
while { [gets $fp data] >= 0 } {
    incr i 
    if { [expr $i % 3] == 0} {
        if { [checkListNat $data] == 0 } {
            puts "error"
        }
    }
}
close $fp

現在の Tcl コードを最適化して、Agda と Tcl 間の速度テストをより現実的にするにはどうすればよいですか?

4

2 に答える 2

1

regex {^[0-9,]+$} $line関数の代わりにチェックしてみてくださいcheckListNat

ここでの更新 は例です

echo "87,566, 45,67\n56,5r5,45" >! 試す

...

while {[gets $fp line] >0} {
 if {[regexp {^[0-9]+$} $line] >0 } {
  puts "OK $line"
 } else {
  puts "BAD $line"
 }
}

与えます:

>OK 87,566, 45,67

>悪い 56,5r5,45

于 2013-07-28T13:45:38.150 に答える