访问从tcl过程返回的列表列表

访问从tcl过程返回的列表列表,tcl,Tcl,我有一个返回列表列表的过程。我不知道如何访问内部列表而不首先拆分它们。我相信一定有更干净的方法 例如,这: proc return_l_of_l {} { set x {a b c} set y {d e f} return [list [list $x] [list $y]] } set l [return_l_of_l] set x_list [lindex $l 0] set y_list [lindex $l 1] foreach x $x_list { puts $x }

我有一个返回列表列表的过程。我不知道如何访问内部列表而不首先拆分它们。我相信一定有更干净的方法

例如,这:

proc return_l_of_l {} {
  set x {a b c}
  set y {d e f}
  return [list [list $x] [list $y]]
}
set l [return_l_of_l]
set x_list [lindex $l 0]
set y_list [lindex $l 1]

foreach x $x_list { puts $x }
foreach y $y_list { puts $y }
产出:

a b c
d e f
不是:


问题在于这一行:

return [list [list $x] [list $y]]
由于
x
y
已经包含列表,因此它会生成一个列表列表。你应该改为:

return [list $x $y]
或者可能:

return [list [list {*}$x] [list {*}$y]]

问题在于这一行:

return [list [list $x] [list $y]]
由于
x
y
已经包含列表,因此它会生成一个列表列表。你应该改为:

return [list $x $y]
或者可能:

return [list [list {*}$x] [list {*}$y]]
返回两个列表的列表,每个列表由单个元素组成-
abc
def
。这是因为
{abc}
{def}
已经是可以解释为列表的结构

应该你只需要

return [list $x $y]
返回两个列表的列表,每个列表由单个元素组成-
abc
def
。这是因为
{abc}
{def}
已经是可以解释为列表的结构

应该你只需要

return [list $x $y]

在打印列表的内部元素时,最好使用类似于
foreach a[concat{*}$l]{put$a}
的内容
concat{*}$l
创建一个包含内部元素的平面列表,这意味着不管外部列表中有多少个列表:您仍然可以使用一个
foreach
命令打印它们。打印列表的内部元素时,最好使用类似
foreach a[concat{*}$l]{put$a}的命令
concat{*}$l
创建一个包含内部元素的平面列表,这意味着不管外部列表中有多少个列表:您仍然可以使用一个
foreach
命令打印它们。