передача списка в качестве аргумента в TCL - PullRequest
0 голосов
/ 10 сентября 2018

Я попытался создать процедуру, которая получает список от пользователя и печатает минимальное и максимальное значения списка.Я думаю, что проблема заключается в передаче списка в качестве аргумента процедуры.Вот мой код:

proc minmaxlist {mylist} {
    lsort -integer $mylist
    puts "my list is: $mylist\n"
    #puts "the length is $argc\n"
    set min [lindex $mylist 0]
    set max [lindex $mylist [llength[mylist] -1]]
    puts "max is $max"
    puts "min is $min"
}

set mylist [list $argv]

minmaxlist $mylist

Я обнаружил, что если мой список {5 7 0}, мой список [0] получает значение 5 7 0 вместо 5. Спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

Проблема не в том, что список передается в процедуру, а в [list $argv]. Переменная argv уже содержит список. Обернув его в другую команду списка, вы получите список только с одним элементом (который сам по себе является другим списком). Этот единственный элемент в конечном итоге будет иметь как минимальное, так и максимальное значение. Поэтому просто передайте $ argv в proc или установите mylist равным $ argv вместо [list $ argv].

Затем в вашем проце вы сортируете список и отбрасываете результат. Вы хотите сохранить результат в переменной. Вы можете использовать мой список для этого: set mylist [lsort -integer $mylist].

Возможно, вы также заметили, что ваше утверждение для получения максимального значения не работает. Вы, вероятно, хотели сделать set max [lindex $mylist [expr {[llength $mylist] - 1}]]. Последний элемент легче получить через set max [lindex $mylist end]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...