Hello Domenico,
I think the issue is that the Smalltalk message at: is computed at compile-time, not at run-time. If instead you use the Capytalk of:, for example,
(!Index_i of: #(0 1 2)) of: #({!Index_j of: #(10 11 12)} {!Index_j of: #(20 21 22)} {!Index_j of: #(30 31 32)})
then !Index_i will select one of the Arrays: #(10 11 12) #(20 21 22) #(30 31 32). And !Index_j will select one element from that Array.
For example, for !Index_1 = 1 and !Index_j = 2, the value of the expression is 22.
Whereas, for !Index_1 = 2 and !Index_j = 0, the value of the expression is 30.