как объединить два списка в tcl8.4.x - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть списки, подобные приведенным ниже, в качестве вывода какой-то функции,

puts $m 
{{bi 1/7 1/8}} {{uni 1/6}}

Мне нужно, чтобы вышеприведенные списки были объединены как {{bi 1/7 1/8} {uni 1/6}} в единый список. Я не могу использовать concat, поскольку у меня 8.4.x. пожалуйста помогите

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Я не совсем уверен, насколько глубоко вы хотите, чтобы конкатенация списка составляла go (обратите внимание, что concat на самом деле предшествует Tcl 7.0 , так что вы, безусловно, имеете его!), Но вот как убрать один уровень списка, используя код, написанный для работы с 8.4:

proc concat_one_level {input_list} {
    set accum_list {}
    foreach item $input_list {
        eval [linsert $item 0 lappend accum_list]
        # From 8.5 onwards, we'd use this instead:
        #    lappend accum_list {*}$item
    }
    return $accum_list
}

Интерактивное тестирование (в 8.5; у меня больше нет установки 8.4):

% puts $m 
{{bi 1/7 1/8}} {{uni 1/6}}
% concat_one_level $m
{bi 1/7 1/8} {uni 1/6}
% concat_one_level [concat_one_level $m]
bi 1/7 1/8 uni 1/6
0 голосов
/ 06 мая 2020

Одно из следующих может удовлетворить ваши потребности:

% puts $m
{{bi 1/7 1/8}} {{uni 1/6}}
% puts [list [join $m]]
{{bi 1/7 1/8} {uni 1/6}}
% puts [llength [list [join $m]]]
1
% 
% puts $m
{{bi 1/7 1/8}} {{uni 1/6}}
% puts [join $m]
{bi 1/7 1/8} {uni 1/6}
% puts [llength [join $m]]
2
% 
0 голосов
/ 03 апреля 2020

Если вы можете установить tcllib , пакет struct::list утверждает, что по-прежнему поддерживает такую ​​древнюю версию tcl, и имеет команду flatten, которая вернет желаемый список .

Пример tclsh сеанс репликации:

% package require struct::list
1.8.3
% set m {{{bi 1/7 1/8}} {{uni 1/6}}}
{{bi 1/7 1/8}} {{uni 1/6}}
% ::struct::list flatten $m
{bi 1/7 1/8} {uni 1/6}
% ::struct::list flatten -full $m
bi 1/7 1/8 uni 1/6               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...