Forcer une liste avec indice à toujours être une liste?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Voici un extrait de code:
a = {"A", "B", "C", "D", 123};
sub1 = liste (1,3,5);
sub2 = liste (1);
show (a [sub1]);
show (a [sub2]);
Sortie:
a [sub1] = {"A", "C", 123};
a [sub2] = "A";
Existe-t-il un moyen d’indiquer une liste avec un nombre arbitraire d’éléments et de toujours faire en sorte que la sortie soit une liste?
Re: Forcer une liste souscrite à toujours être une liste?Salut Martin
C’est quelque chose que nous "réparons" pour JMP 13. Je mets "fixation" entre guillemets, car il est possible que certains scripts hérités dépendent de l'ancien comportement et considèrent le correctif comme une pause. Si cela s'avère être un gros problème, nous devrons peut-être trouver une alternative.
je C’est bien de voir votre message qui soutient l’idée d’un correctif.
Re: Forcer une liste souscrite à toujours être une liste?En voici un meilleur qui fonctionne sur des listes de listes.
a = {{"A"}, {"B"}, {"C"}, {"D"}, {123}};
sub1 = liste (1,3,5);
sub2 = liste (1);
ForceList = Fonction ({forceme},
Si (est la liste (forceme), forceme, EvalList (la liste (forceme)))
)
SubscriptList = Function ({inlist, subscriptlist},
si (N éléments (indice)) == 1,
EvalList (Liste (inlist [subscriptlist]))
,
inlist [subscriptlist]
)
)
Sortie:
show (ForceList (a [sub1]));
show (ForceList (a [sub2]));
{{"A"}, {"C"}, {123}};
{"UNE"};
show (SubscriptList (a, sub1));
show (SubscriptList (a, sub2));
{{"A"}, {"C"}, {123}};
{{"UNE"}};
Re: Forcer une liste souscrite à toujours être une liste?Oui, c'est un peu ce que j'ai pensé. J'ai écrit une simple "fonction d'assistance" que je pense pouvoir utiliser sur les listes en indice. Merci!
ForceList = Fonction ({forceme},
Si (est la liste (forceme), forceme, EvalList (la liste (forceme)))
)
show (ForceList (a [sub1]));
show (ForceList (a [sub2]));
Sortie:
{"A", "C", 123};
{"UNE"};
Re: Forcer une liste souscrite à toujours être une liste?Lorsque votre indice n'a qu'une valeur, il retournera toujours la valeur unique. Si votre indice est une liste avec plusieurs valeurs, il retournera toutes les valeurs sous la forme d'une liste.
Pour contourner ce problème, vous avez besoin d'une instruction If pour vérifier le nombre de valeurs dans votre liste d'indices et pour envelopper le retour si l'indice n'a qu'une valeur.
Voici un exemple que j'ai rassemblé:
une = { "UNE" , "B" , "C" , "RÉ" , 123 } ;
sub1 = liste ( 1 , 3 , 5 ) ;
sous2 = liste ( 1 ) ;
Eval ( Eval Expr ( indicesListe = { Expr ( sub1 ) , Expr ( sous2 )} ) ) ;
Pour ( je = 1 , je <= N articles ( indicesListe ) , je ++,
Si ( N articles ( indicesListe [ je ] ) > 1 ,
temp = une [ indicesListe [ je ]] ,
temp = Eval ( Eval Expr ( liste ( Expr ( une [ indicesListe [ je ]] ) ) ) )
) ;
Spectacle ( temp ) ;
) ;