以下の例に示すように、特定のリストに番号が欠落している番号のリストを作成したかったのです。
既存のリスト{1,3、5、9、13、15}
結果リスト{2,4,6,7,8,10,11,12,14}
拡張TCLには、intersect3
戻り値の1つとしてのリストを提供する関数がありA-B
ます。あなたはあなたのリストをあなたのリストにまたがるすべての可能な数のリストと交差させることができます。
拡張TCLを使用しない場合は、自分で何かを実装する必要があります。
私はTCLをほとんど使用しないので、もっと良い方法があるかもしれませんが、基本的なアプローチは、リストを並べ替えてから、リストを実行して不足している値を見つけることです。
#!/usr/bin/tclsh
set A {1 3 5 9 13 15}
set A [lsort -integer $A]
set B {}
set x 0
set y [lindex $A $x]
while {$x < [llength $A]} {
set i [lindex $A $x]
while {$y < $i} {
lappend B $y
incr y
}
incr x
incr y
}
puts $B
出力:
2 4 6 7 8 10 11 12 14
水田の答えはかなり良さそうです。これは少し短く、リストがすでに並べ替えられていることを前提としています。
package require Tcl 8.5
set A {1 3 5 9 13 15}
set result [list]
for {set i [lindex $A 0]; incr i} {$i < [lindex $A end]} {incr i} {
if {$i ni $A} {
lappend result $i
}
}
「ni」演算子については、http://tcl.tk/man/tcl8.5/TclCmd/expr.htm#M15を参照してください。