您好我是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)
答案 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), for, gets, incr, lappend, lindex, lset, proc, puts, return, set