Почему переменные не изменяются из цикла в красном языке

Я хочу изменить ряд переменных из цикла, но следующий код не работает:

a: 10
b: 20
c: 30
print reduce [a b c]              ; output is 10 20 30 as expected

varnames: [a b c]                 ; make a series of variables
foreach i varnames [              ; loop to convert each to 0
    i: 0
]

print "After conversion loop: "
print reduce [a b c]              ; values are still 10 20 30 (expected 0 0 0)

После запуска этого кода я ожидал, что значения a, b, c будут изменены, но это не так:

>> print reduce [a b c]   
10 20 30

В чем проблема?


person rnso    schedule 23.09.2017    source источник


Ответы (2)


>> set varnames: [a b c] [10 20 30]
== [10 20 30]

>> foreach i varnames [set i 0]
== 0

>> reduce varnames
== [0 0 0]

Вы дали i значение из цикла, а затем присвоили ему другое значение 0, но на самом деле вы не изменили слово, на которое я ссылался. set позволяет это сделать.

person Graham Chiu    schedule 23.09.2017
comment
Да, это работает. Я думаю, что set следует подчеркивать больше, чем присваивание ':'. - person rnso; 23.09.2017
comment
Вам нужно двоеточие в set varnames: [a b c] [10 20 30] ? - person rnso; 23.09.2017
comment
@rnso нет; set varnames [a b c] [10 20 30] в порядке - person Geeky I; 23.09.2017
comment
@Geeky, это не сработает. Попробуйте на новой консоли, и вы поймете, почему нет. Требуется как минимум две операции, первая установить 'varnames [a b c] - person sqlab; 23.09.2017
comment
или в одной строке set set 'varnames [a b c] [10 30 40] - person sqlab; 23.09.2017
comment
@sqlab вы правы, я предполагал, что varnames уже определено раньше - person Geeky I; 23.09.2017
comment
Даже если имя_переменной уже определено, это не сработает, так как для переменной задано значение [a b c], а затем остается [10 20 30]. один - person sqlab; 23.09.2017

еще одно, но самое короткое решение

>> set [a b c] 0
== 0
>> reduce [a b c]
== [0 0 0]

еще один

set set 'varnames [a b c] [0]
>> print probe varnames
[a b c]
0 0 0
person sqlab    schedule 23.09.2017
comment
Вопрос и ответы очень похожи на stackoverflow.com/questions/46234891/ - person sqlab; 23.09.2017
comment
конечно, но set set-word: уже было показано Грэмом выше - person sqlab; 23.09.2017