why does this not halt?

i:1;while[~i=3;{x::y}[`i;3]]

because it is setting local x to 3.

inside a function, :: sets global when the local is not defined.

here x is implicit arg.

 

use set instead