Nano Hash - криптовалюты, майнинг, программирование

Как использовать puts с несколькими переменными в одном аргументе в Tcl?

У меня есть ряд списков, таких как a1, a2, a3, a4, .... Я хочу напечатать их в цикле, поэтому и a, и i являются переменными. Как я могу это сделать?

Это не работает.

for {set i 1}....
 puts $a$i
}

заранее спасибо

11.01.2021

  • Вы имеете в виду, что у вас есть переменные a1, a2, a3 и т. д.? 11.01.2021
  • Если да, возможно ли перейти на использование массива, a(1), a(2), a(3) и т. д.? Это намного проще, чем код для чтения из переменной переменной… 11.01.2021
  • Спасибо за ваш ответ, но нет, каждый из них представляет собой отдельные списки, такие как: set a1 [list 1 2 3 4]; установить a2 [список 10 20 30 40]; установить a3 [список 100 200 300 400] 11.01.2021
  • Это не шоу-стоппер. Вы можете сделать set a(1) [list 1 2 3 4]; set a(2) [list 10 20 30 40]; # .... Лучше всего следовать совету @DonalFellows по использованию массива, который, так сказать, представляет собой набор переменных с общим префиксом. 11.01.2021

Ответы:


1

В идеале вы должны иметь их в ассоциативном массиве, но в противном случае…

Чтобы прочитать переменную, имя которой непостоянно, используйте команду set с всего одним аргументом вместо синтаксиса $. (Это использование set предшествует $.)

for {set i 1} {$i <= 3} {incr i} {
    puts [set a$i]
}

Однако было бы лучше использовать массив (чтобы переменные фактически назывались a(1), a(2) и т. д. вместо a1, a2 и т. д.). Но это также означает изменение кода, создающего переменные.

for {set i 1} {$i <= 3} {incr i} {
    puts $a($i)
}

Другим реалистичным вариантом доступа к переменным-переменным является команда upvar. На самом деле это не рекомендуется в глобальном пространстве имен, но в процедуре это очень эффективно.

proc printThree {} {
    for {set i 1} {$i <= 3} {incr i} {
        upvar 1 a$i vbl
        puts $vbl
    }
}

Это особенно хорошо работает при выполнении более сложных операций, чем просто печать значения.

11.01.2021
  • Спасибо, это именно то, что я хочу. грази Милле! 12.01.2021

  • 2

    Как список:

    set a1 [list 1 2 3 4]
    set a2 [list 10 20 30 40]
    set a3 [list 100 200 300 400]
    set a4 [list 1000 2000 3000 4000]
    
    foreach i [list {*}$a1] { puts "\$a$i: [set a$i]" }
    # $a1: 1 2 3 4
    # $a2: 10 20 30 40
    # $a3: 100 200 300 400
    # $a4: 1000 2000 3000 4000
    

    Как массив:

    array set a {
     1 {1 2 3 4}
     2 {10 20 30 40}
     3 {100 200 300 400}
     4 {1000 2000 3000 4000}
    }
    
    parray a
    # a(1) = 1 2 3 4
    # a(2) = 10 20 30 40
    # a(3) = 100 200 300 400
    # a(4) = 1000 2000 3000 4000
    

    Как дикт:

    set a [dict create         \
    a1 {1 2 3 4}               \
    a2 {10 20 30 40}           \
    a3 {100 200 300 400}       \
    a4 {1000 2000 3000 4000}]  
    
    dict for {k v} $a { puts "$k: $v" }
    # a1: 1 2 3 4
    # a2: 10 20 30 40
    # a3: 100 200 300 400
    # a4: 1000 2000 3000 4000
    

    Как матрица:

    package require struct::matrix 
    
    ::struct::matrix xdata
    xdata add columns 4
    xdata add rows    4
    
    xdata set rect 0 0 {
    {1 2 3 4}
    {10 20 30 40}
    {100 200 300 400}
    {1000 2000 3000 4000}
    }
    
    join [xdata get rect 0 0 end end] \n
    # 1 2 3 4
    # 10 20 30 40
    # 100 200 300 400
    # 1000 2000 3000 4000
    
    #cleanup 
    xdata destroy
    
    11.01.2021
  • Спасибо за вашу помощь 12.01.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..