proc proc_remove_from_one_list { lista listb } {
set index [ lsearch -exact $lista $listb ]
if { $index == -1 } {
puts "Error: can't find $listb in $lista"
}
set lista [ lreplace $lista $index $index ]
return $lista
}
如上述代码所示,用到了lsearch和lreplace两个tcl 语法,在这里介绍一下这两种tcl 语法的应用。
lsearch ?options? list pattern 这里的option选用了-exact ,表示Pattern是一个文字字符串,用于与每个列表元素进行完全相等的比较。 用在这里,若pattern在list里可以匹配到,则返回匹配对应位置的数值(从0位开始),若匹配不到,则返回-1。
lreplace - 在一个列表中使用新的元素替代其它元素。
lreplace list first last ?element element ...?
lreplace返回一个新的列表,新的列表通过替代一个或者多个list列表中的元素。上述脚本使用相同的index值,则会返回一个去掉index位置的元素的新列表,从而达到我们的目的。