2017-10-23 8 views
0

私はリストのリストを返す手続きを持っています。最初に分割しないで内部リストにアクセスする方法を理解できません。私はきれいな方法がなければならないと確信しています。例えば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 } 
foreach y $y_list { puts $y } 

出力:

a b c 
d e f 

ない:

a 
b 
c 
d 
e 
f 
+0

リストのリスト内の要素を印刷する場合、それは '[連結{*} $ Lを] foreachの' {$ A置く}のようなものを使用することをお勧めしますが必要があると思います。 'concat {*} $ l'は内側の要素を含むフラットなリストを作成します。つまり、外側のリストにいくつのリストがあるかは関係ありません:あなたは1つの' foreach'コマンドでそれらを印刷することができます。 –

答えて

3

問題は、この行である:

return [list [list $x] [list $y]] 

xyはすでにリストを保持しているので、リストのリストを作成します。あなたの代わりに行う必要があります。

return [list $x $y] 

または可能性:

return [list [list {*}$x] [list {*}$y]] 
0
proc return_l_of_l {} { 
    set x {a b c} 
    set y {d e f} 
    return [list [list $x] [list $y]] 
} 

は、それぞれが単一の要素からなる二つのリストのリストを返す - a b cd e f。これは、{a b c}{d e f}が既にリストとして解釈できる構造体であるためです。

たぶんあなただけの

return [list $x $y] 
関連する問題