为了比较Agda 编程语言和 Tcl 脚本语言的速度,我正在执行一个微小的速度测试。它用于科学工作,这只是一个预测试,而不是真正的测试。无论如何,我并不是在尝试进行现实的速度比较!
我提出了一个小例子,其中 Agda 比 Tcl 快 10 倍。我使用这个例子有特殊的原因。我主要担心的是我的 Tcl 代码编程很糟糕,这是在这个例子中 Tcl 比 Agda 慢的唯一原因。
代码的目标是解析表示整数列表的行并检查它是否确实是整数列表。
示例“ (1,2,3)
”将是一个有效列表。
示例“ (1,a,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 之间的速度测试更真实?