Como siempre tengo problemas con Eval y Expr.
Necesito crear una matriz asociativa donde los valores se evaluarían como resultados de algunas expresiones.
Por ejemplo necesito crear
aaa=[
"2x2" => 4
]
pero 4 hay un resultado de la expresión evaluada Expr(2*2)
La variante poco convincente que obviamente no funciona está aquí:
aaa=[
"2x2" => 2*2
]
Pero luego diré que 2*2 es una Expr:
aaa=[
"2x2" => Expr(2*2)
]
y luego usaré Eval Expr para evaluar todas las expresiones dentro del argumento y devolver la expresión con subexpresiones evaluadas:
Eval Expr(
aaa=[
"2x2" => Expr(2*2)
]
)
y ya no funciona - no evalúa Expr(2*2)
El siguiente paso sería evaluar la expresión resultante:
Eval(
Eval Expr(
aaa=[
"2x2" => Expr(2*2)
]
)
)
pero obviamente no funciona.
¿Por qué no funciona y cuál es la forma correcta?
Entendido. Pensé que era específico de la matriz asociativa, pero parece que es específico de la sintaxis 
@Craige_Hales ¡Bueno saber!¡Parece que tienes experiencia en desarrollo detrás de escena en esto!
Por que no funciona
La forma de corchete es una constante de tiempo de compilación, tanto para matrices como para matrices asociativas. La constante entre corchetes se clona en tiempo de ejecución y se almacena en aaa.
@ataqueerrático es la forma en que yo también lo haría.
JMP no es más que inconsistente.Puedes hacerlo mediante listas, que es lo que hago yo en estas circunstancias:
val1 = "Steve";
val2 = "The";
val3 = "Turtle";
aaa = Associative Array(
{"key1", "key2", "key3"},
Eval List( {val1, val2, val3} )
);
show( aaa )