Это не задача сортировки, это поиск задачи.
Если предположить, что диапазоны для обратных не пересекаются, но не обязательно присутствуют либо (т.е. не используя тот факт, что они являются смежным номером), вы получите что-то вроде этого:
# Iterate over each of the replacement patterns
foreach range $array1 {
# Iterate over each of the locations where the first element of the current
# replacement pattern is found
foreach pos [lsearch -all -exact $list1 [lindex $range 0]] {
# This will be the index of the *last* element in each subrange
set pos2 [expr {$pos + [llength $range] - 1}]
# Do the reversed replacement if the ranges match
if {[lrange $list1 $pos $pos2] eq $range} {
set list1 [lreplace $list1 $pos $pos2 {*}[lreverse $range]]
}
}
}
Результат после этого будет в обновленlist1
переменная. Завершение процедуры в качестве упражнения.