我如何在用户输入的tcl中插入项目列表

时间:2017-09-23 00:33:01

标签: tcl

您好我是tcl的新手我正试图从用户输入中插入proc到list的列表并返回列表并在另一个列表中调用它 我试过这个,我得到了

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 个答案:

答案 0 :(得分: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