Как преобразовать список в список, содержащий его элемент в виде списка? - PullRequest
0 голосов
/ 12 июня 2019

Например, в Tcl есть такой список, как {"A" "B"}

, и я хотел бы преобразовать его в список, каждый элемент которого был бы представлен в виде списка {{A} {B}}

Я попробовал следующий код, чтобы отобразить каждый его элемент в список.

set List {"A" "B"}
set List [lmap s $List {list $s}]
puts $List

Я ожидаю, что результат будет

{A} {B}

, но фактический результат равен

AB

Любая помощь будет принята с благодарностью.Благодаря.

1 Ответ

0 голосов
/ 12 июня 2019

Форма, которую вы ищете, это денормализованный список;это не та операция, которую производят списки Tcl (поскольку они добавляют фигурные скобки только при необходимости), а та, которую они могут использовать.Это означает, что, формально говоря, то, что вы хотите сделать, это не рекомендуется! Борьба с программным обеспечением не является хорошим планом!

Но это возможно.Если вы знаете , что элементы относительно хорошо себя ведут (приблизительно, что они сами имеют сбалансированные фигурные скобки, если они вообще есть), вы можете сделать это с помощью join и format:

set List {"A" "B"}
set List [join [lmap x $List {format "{%s}" $x}]]

Это работает для большинства списков, но не для всех, так что будьте осторожны:

set List {A B}
lappend List "C\{D";  # <== Element with unbalanced braces; *LEGAL* in lists!
puts $List
# ==> A B C\}D
puts [join [lmap x $List {format "{%s}" $x}]]
# ==> {A} {B} {C}D}

Обходные пути для этого становятся все более и более искаженными, и поэтому рекомендуется использовать только встроенные Tcl.в механизме сериализации списка, который обрабатывает содержимое произвольного элемента (и проверяется на это), а не заботится о том, как форматируются простые слова.

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