在TCL脚本中添加了两个3x3矩阵



我最近刚开始使用TCL脚本。我发现写一个添加两个3x3矩阵并打印结果的脚本很困难。以下是我尝试过的:

set arr1 {{1 2 3} {4 5 6} {7 8 9}}
set arr2 {{3 2 1} {6 4 5} {8 9 7}}
foreach a $arr1 b $arr2 {
foreach c $a d $b {
set sum [expr $c + $d]
lappend z $sum
}
lappend y $z
unset z
}  
puts $y

上面的脚本给了我{4 4 4} {10 9 11} {15 17 16}

有没有更好的方法可以得到同样的结果?

你必须做大约那么多的工作。然而,也有一些优化是可能的,其中唯一真正重要的是支撑您的表达式(以便能够编译它们(。以下是作为一行代码添加的内容:

set y [lmap a $arr1 b $arr2 {lmap c $a d $b {expr {$c+$d}}}]

拆分事物,重命名变量,并添加一些空白:

set y [lmap row1 $arr1 row2 $arr2 {
lmap cell1 $row1 cell2 $row2 {
expr {$cell1 + $cell2}
}
}]

lmapforeach一样,只是它列出了用于评估其主体的值(foreach将其丢弃(。在lmap中使用lmap使加法在单元上起作用。(如果你把它放在一个过程中,你会得到这个代码的最佳编译。(


要想做得更好,需要使用VecTcl这样的包,它可以将计算提升到C.中

最新更新