PCLuc 350087 microseconds per iteration time 0 microseconds time 0 microseconds
wrong # args: should be "exit code"
    while executing
"exit"
    (in namespace eval "::request" script line 69)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

#!/home/moumou/tcl8.6b1/lubin/bin/tclsh8.6 ###!/usr/bin/tclsh proc Data {{n 100} {l 1000}} { set ll [list A C D E F G H I K L M N P Q R S T V W Y . . . . . . . . . . . . . . . . . . . . .] for {set s 0} {$s < $n} {incr s} { set seq "" for {set i 0} {$i < $l} {incr i} { append seq [lindex $ll [expr {round(40*rand())}]] } lappend Lseq $seq } return $Lseq } proc NRI1 {s1 l1 s2 l2} { for {set i 0} {$i < [llength $s1]} {incr i} { incr pc [expr {[set a [lindex $s1 $i]] ne "." && [lindex $s2 $i] eq $a}] } return [expr {$l1>$l2?$pc*1.0/$l1:$pc*1.0/$l2}] # return [expr {double($pc)/($l1>$l2?$l1:$l2)}] # return [expr {double($pc)/max($l1,$l2)}] } proc NRI2 {s1 l1 s2 l2} { foreach a $s1 b $s2 { incr pc [expr {$a ne "." && $b eq $a}] } return [expr {$l1>$l2?$pc*1.0/$l1:$pc*1.0/$l2}] # return [expr {double($pc)/($l1>$l2?$l1:$l2)}] # return [expr {double($pc)/max($l1,$l2)}] } proc PCLuc {d} { set i 1 foreach s $d { lappend Lg [string length [string map [list "." ""] $s]] lappend Ls [split $s ""] } set t1 0 set t2 0 foreach s1 [lrange $Ls 0 end-1] l1 [lrange $Lg 0 end-1] { foreach s2 [lrange $Ls $i end] l2 [lrange $Lg $i end] { # incr t1 [expr {int( [lindex [time {set pc1 [NRI1 $s1 $l1 $s2 $l2]} 10] 0])}] set pc2 [NRI2 $s1 $l1 $s2 $l2] incr i } } return [list $t1 $t2 $i] } set d [Data 300 3000] puts "PCLuc [time {set t1t2 [PCLuc $d]} ]" lassign $t1t2 t1 t2 i puts "time [expr {$t1/($i-1)}] microseconds" puts "time [expr {$t2/($i-1)}] microseconds" exit