>

안녕하세요 tcl을 처음 사용합니다. 사용자 입력에서 proc에 나열 할 요소를 삽입하고 목록을 반환하고 다른 목록에서 호출하려고합니다. 나는 이것을 시도했고 나는 얻는다

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 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은 거의 입력되지 않았습니다. 키보드에서 문자열을 입력하면 해당 문자열이 목록에 입력됩니다. 해당 문자열이 유효한 정수이면 정수처럼 사용할 수 있습니다. 필요하지 않으며 변환 할 수 없습니다.

    문서 : <(연산자), 에 대한, 얻는다 incr, lappend, lindex, lset, proc, 넣어 반환, 설정

관련 자료

  • 이전 Swift 사전에 값을 추가 할 때 예상되는 선언
  • 다음 Unable to compile Android app - android 앱을 컴파일 할 수 없습니다 - 코로나의 오류 256