¿Qué ocurre aquí? Problema de expresión en Formula()¡Precaución! ¡JMP se bloqueará!
Names Default To Here( 1 );
f = Function( {},
/* .... */
ID = Associative Array( {{Name Expr(), 1}, {Expr(), 2}, {Function(), 3}}, 0 );<BR />/* .... */
);
f();
Eliminar la función() de la lista corrige el error.
Sacar la matriz asociativa de la función externa corrige el error.
[editar] una motivación por la cual esto puede ser útil:
como tabla de búsqueda para partes de expresiones, identificadas mediante Head() y Type():
myID = ID[Expr(function())]; // expected: 3
code = Expr(g = function ({x},1));
Head(Arg(code,2)); // function()
myID = ID[Head(Arg(code,2))]; // expected: 3Automatización y scriptingRe:¿Qué pasa aquí?Seguro que supera a JMP. Acabas de inventar una nueva forma rápida de salir de una sesión de JMP...
¡Esto debe enviarse al soporte de JMP! No se supone que sucedan este tipo de cosas.
Re: ¿Qué pasa aquí?Tengo otro:
¡Precaución! ¡JMP se bloqueará!
x = Expr(Function());
Show(name Expr(x) == Expr(Function()));
Print("not dead");
f = function({arg},
name Expr(arg) == Expr(Function()))fuera de la función la comparación de x con Función() está bien.
Dentro de la función, JMP ya se bloqueará cuando vea el comando: no es necesario llamar a f .
Re: ¿Qué pasa aquí?del soporte de JMP (TS-00166834):
Existe un problema conocido en el que JMP se bloquea al utilizar una función mal formada en otra función.
Por lo tanto, la causa raíz se puede reducir a:
¡Precaución! ¡JMP se bloqueará!
f = Function( {}, Expr(Function()));
... luciendo tan inocente.
Definición de función mal formada : sí. Pero es una expresión JSL "bien formada" según...
@joseph_morgan / Uso de JSL para desarrollar aplicaciones eficientes y robustas (EU 2018 415) .
Entonces, es sorprendente que JMP no pueda vivir con eso.
La función dentro de la función me recuerda a la rareza de JMP Expr(), ¿alguien puede explicarlo? / @ErraticAttack .
Entonces, además de los usuarios, incluso JMP tiene problemas cuando una expresión aparece en diferentes niveles. ¿Quizás Insertar en: Aplanar(0|1) o @Substitute First Occurence podrían ayudar a JMP?

Las sugerencias del soporte de JMP:
Hay un par de cosas más que puedes hacer para evitar el bloqueo. Una es colocar las llaves ({}) como argumento obligatorio en la función interna. Otra es eliminar los paréntesis después de la palabra "Función" en la función interna.
Lamentablemente no hay ayuda para el caso de aplicación mencionado anteriormente.
Re:¿Qué pasa aquí?Una solución alternativa:
f = Function( {},
/* .... */
ID = Associative Array( {{"Name Expr()", 1}, {"Expr()", 2}, {"Function()", 3}}, 0 );
/* .... */
);
f();
code = Expr(g = function ({x},1));
myID=ID[Char(Head(Arg(code,2)))]
pero "duele" un poco...

Re:¿Qué pasa aquí?Me gusta mucho más este:
f = Function( {},
/* .... */
Eval (Eval Expr(ID = Associative Array( {{Name Expr(), 1}, {Expr(Parse("Expr()")), 2}, {Expr(Parse("Function()")), 3}}, 0 )));
/* .... */
);
f;
code = Expr(g = function ({x},1));
myID=ID[Head(Arg(code,2))];
No puede funcionar, después de la expresión eval será más o menos lo mismo que antes...
... ¡Guau!
NB: Expr() no sobrevivirá a Eval Expr , por lo que deberá protegerse.
Re:¿Qué pasa aquí?-
Re: ¿Qué ocurre aquí? Problema de expresión en Formula()De hecho, envié este informe de error hace unos días. Descubrí que usar Expr(Function()) dentro de una función provoca un bloqueo. Lo estaba usando en el contexto de
Substitute(my_expr, Expr(Function()), Expr(Method()))
Pero pude obtenerlo usando Expr(Función) en su lugar.
Para tu problema, otra posible solución si no quieres analizar cadenas es hacer algo como esto
y = Function({head_key},
ID = Associative Array( EvalList({{Name Expr(), 1}, {Expr(), 2}, EvalList({Head(Expr(Function({},1))), 3})}), 0 );
ID[NameExpr(head_key)]
);
Show(y(Expr(Function())));Aunque todavía no es exactamente "bonito".
Re: ¿Qué ocurre aquí? Problema de expresión en Formula()Head(Expr(Function()))
¡lindo!
mucho mejor que mi Eval(... Parse( ... especialmente después de citar a Joseph
