2013-01-14 33 views
1

我想如下如何使用TCL

現有的列表{1中的例子提供創建在給定的列表丟失號碼號碼列表號的非continious列表創建丟失號碼的清單, 3,5,9,13,15}

結果的列表{2,4,6,7,8,10,11,12,14}

回答

3

擴展TCL具有功能intersect3它爲一個其返回值給出了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 
1

paddy的答案看起來不錯。這是短一點,假設列表已經排序。

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 
    } 
} 

請參閱http://tcl.tk/man/tcl8.5/TclCmd/expr.htm#M15「ni」運算符。