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 間の速度テストをより現実的にするにはどうすればよいですか?