如何在tcl中设置键控列表?

如何在tcl中设置键控列表?,tcl,Tcl,当我要在代码中使用“keylset”时,它得到了一个错误“无效的命令名”keylset”“ 设置列表1“a 1 b 2 c 3 d 4” 对于{set i 0}{$i

当我要在代码中使用“keylset”时,它得到了一个错误“无效的命令名”keylset”“

设置列表1“a 1 b 2 c 3 d 4”
对于{set i 0}{$i<[llength$list1]}{incr i}{
keylset klist[lindex$list1$i][lindex$list1[expr$i+1]]
集合列表
}
把$klist

请给我一些解决方案。

键控列表命令是TclX扩展包的一部分。 为了让它们出现在脚本中,您必须发出以下命令(这将安排加载相关的共享库并获取脚本)

如果您使用的是ActiveTcl发行版,您可以执行以下操作:

teacup update
它安装了许多软件包的当前版本,其中包括TclX。您可能需要在Windows上的提升命令shell中执行此操作,或者在OSX上使用
sudo
作为前缀

如果您在OSX上使用MacPorts,
tclx
在MacPorts系统中(也是正确的版本)


由于有许多可能的发行版,或者您可以自己从源代码构建它,如果您的平台和设置不是我上面列出的,您需要仔细指定它是什么。您确定您的代码是正确的吗?它给出了结果

{a 1} {1 b} {b 2} {2 c} {c 3} {3 d} {d 4} {4 {}}
那是你想要的吗?如果你想

{a 1} {b 2} {c 3} {d 4}
您应该在每次迭代中将
i
的值增加2(
incr i2

您可以通过这种方式获得相同的结果(需要Tcl 8.5或更高版本):

或通过(需要Tcl 8.6和TclX包)

对于较旧的版本,这会执行相同的操作:

set klist [list]
foreach {a b} "a 1 b 2 c 3 d 4" {
    lappend klist [list $a $b]
}
文件:


对于TclX文档,似乎是一个很好的起点。

keylset
是软件包中的一个命令。我已经安装了tclx8.4,但问题仍然存在。
sudo port install tclx
{a 1} {1 b} {b 2} {2 c} {c 3} {3 d} {d 4} {4 {}}
{a 1} {b 2} {c 3} {d 4}
set klist [lmap {a b} "a 1 b 2 c 3 d 4" {list $a $b}]
keylset klist {*}"a 1 b 2 c 3 d 4"
set klist [list]
foreach {a b} "a 1 b 2 c 3 d 4" {
    lappend klist [list $a $b]
}