¿Forzar una lista de subíndices siempre para que sea una lista?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Aquí hay un fragmento de código:
a = {"A", "B", "C", "D", 123};
sub1 = lista (1,3,5);
sub2 = lista (1);
show (a [sub1]);
show (a [sub2]);
Salida:
a [sub1] = {"A", "C", 123};
a [sub2] = "A";
¿Hay alguna forma de subscribir una lista con un número arbitrario de elementos, y siempre hacer que la salida sea una lista?
Re: ¿Forzar una lista de subíndices siempre para que sea una lista?Hola martin,
Esto es algo que estamos "arreglando" para JMP 13. Pongo "corrigiendo" entre comillas porque es posible que algunas secuencias de comandos heredadas dependan del comportamiento anterior y consideren que la solución es una interrupción. Si eso resulta ser un gran problema, es posible que tengamos que encontrar una alternativa.
yo Es bueno ver tu mensaje que apoya la idea de una solución.
Re: ¿Forzar una lista de subíndices siempre para que sea una lista?Aquí hay una mejor que funciona en listas de listas.
a = {{"A"}, {"B"}, {"C"}, {"D"}, {123}};
sub1 = lista (1,3,5);
sub2 = lista (1);
ForceList = Función ({forceme},
Si (es Lista (forceme), forceme, EvalList (Lista (forceme)))
);
SubscriptList = Función ({inlist, subscriptlist},
if (N elementos (lista de subíndices) == 1,
EvalList (Lista (inlist [lista de subscriptores]))
,
inlist [subscriptlist]
)
);
Salida:
show (ForceList (a [sub1]));
show (ForceList (a [sub2]));
{{"A"}, {"C"}, {123}};
{"UNA"};
show (SubscriptList (a, sub1));
show (SubscriptList (a, sub2));
{{"A"}, {"C"}, {123}};
{{"UNA"}};
Re: ¿Forzar una lista de subíndices siempre para que sea una lista?Sí, eso es algo de lo que pensé. Escribí una simple "función auxiliar" que creo que puedo usar en las listas de subíndices. ¡Gracias!
ForceList = Función ({forceme},
Si (es Lista (forceme), forceme, EvalList (Lista (forceme)))
);
show (ForceList (a [sub1]));
show (ForceList (a [sub2]));
Salida:
{"A", "C", 123};
{"UNA"};
Re: ¿Forzar una lista de subíndices siempre para que sea una lista?Cuando su subíndice solo tiene un valor, siempre devolverá el valor único. Si su subíndice es una lista con varios valores, devolverá todos los valores en forma de una lista.
Para evitar esto, necesita una declaración If para verificar cuántos valores hay en su lista de subíndices y envolver la devolución si el subíndice tiene solo un valor.
Aquí hay un ejemplo que junté:
una = { "UNA" , "SEGUNDO" , "DO" , "RE" , 123 } ;
sub1 = Lista ( 1 , 3 , 5 ) ;
sub2 = Lista ( 1 ) ;
Evaluar ( Eval Expr ( indicesList = { Expr ( sub1 ) , Expr ( sub2 )} ) ) ;
por ( yo = 1 , yo <= N artículos ( indicesList ) , yo ++,
Si ( N artículos ( indicesList El yo ] ) > 1 ,
temperatura = una El indicesList El yo ]] ,
temperatura = Evaluar ( Eval Expr ( Lista ( Expr ( una El indicesList El yo ]] ) ) ) )
) ;
Show ( temperatura ) ;
) ;