2017-09-23 23 views
1

您好我是新来的tcl我想插入元素列表中的proc从用户输入并返回列表并调用它在另一个列表 我已经尝试这个,我得到我如何插入项目列表中的tcl从用户输入

puts "Enter list Size" 
set size [gets stdin] 
set aList [fillTheList $size] 

proc fillTheList {arg1 } { 
    set lList {} 
    for {set i 0} {$i <= $arg1} {incr i} { 
     set value [gets stdin] 
     linsert $lList $i int(value)] 
     puts "[lindex $lList $i]" 
    } 
    return $lList 
} 

,我在cmd中得到这个错误

invalid command name "fillTheList" 
    while executing 
"fillTheList $size" 
    invoked from within 
"set aList [fillTheList $size]" 
    (file "ascending.tcl" line 5) 
+1

你必须在你调用它之前定义proc **。只需将'set aList [fillTheList $ size]'移动到最后。 –

+0

@glennjackman它的工作,但我得到这个错误 –

+0

@glennjackman无法读取“ALIST”:没有这样的变量 在执行 “设置ALIST [fillTheList $大小]” (文件“ascending.tcl”第21行) –

回答

1

尝试

proc fillTheList {arg1 } { 
    set lList {} 
    for {set i 0} {$i < $arg1} {incr i} { 
     puts -nonewline "Enter value " 
     set value [gets stdin] 
     lappend lList $value 
     puts [lindex $lList $i] 
    } 
    return $lList 
} 

puts -nonewline "Enter list Size " 
set size [gets stdin] 
set aList [fillTheList $size] 

有两点要注意:

  • 如果您在for调用设定的条件$i <= $arg1它会要求一个更加列表项比你想要的,因为i从0开始

  • 而不是lappend ,可以使用lset lList $i $value。它过去只能够更改列表中已有的元素,但现在它可以更改列表中最后一个元素后面的元素,并将列表中的元素扩展一个。

  • lList是一个非常糟糕的变量名称,因为它很容易混淆名称,如IList

  • Tcl几乎没有打字。您从键盘输入字符串,这些字符串被输入到列表中。如果这些字符串是有效的整数,它们可以像整数一样使用。你不需要,也不能转换它们。

文档: < (operator)forgetsincrlappendlindexlsetprocputsreturnset

相关问题