2017-09-23 88 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