Проблема не в том, что список передается в процедуру, а в [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]