破坏性的 TCLunshift

Destructive TCLunshift


假设我有一个列表 {1 2 3 }。我想取消它。创建一个 { 0 1 2 3 } 的列表,而不创建新列表。这是为了节省复杂性。在 Perl 和 Ruby 中,使用 unshift 是可能的。是否有 TCL 等效产品?
谢谢。

Tcl中没有这样的命令,但你可以很容易地自己制作:

proc lunshift {var args} {
    upvar 1 $var list
    set list [linsert $list[set list {}] 0 {*}$args]
}

[set list {}] 部分是使列表不共享的技巧,因此不会产生重复。有关详细信息,请参阅 the Tcl wiki

演示:

set mylist {1 2 3}
lunshift mylist 0
puts $mylist;  # Result => 0 1 2 3