Différence entre les boucles FOR et FOR EACHQuelqu'un peut-il expliquer pourquoi ceci :
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
y expr = Expr( Y() );
For( c = 1, c <= N Items( col ), c++,
Insert Into( y expr, col[c] );
);
Name Expr(y expr);produit le résultat attendu
Y( :Runtime, :RunPulse, :RstPulse )
mais ça:
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
y expr = Expr( Y() );
For each({coll, index},col,
Insert Into( y expr, coll );
);
Name Expr(y expr);produit ceci :
Y( ., ., . )
Je m'attendrais à ce que cela donne le même résultat ? Comment dois-je changer la boucle FOR EACH pour donner le même résultat ?
Études de consommation et de marchéPartager et communiquer les résultatsRe : Différence entre les boucles FOR et FOR EACHCe n'est pas un bug - dans ce cas, c'est en fait la cohérence de JMP.Lors de l'indexation d'une liste, le résultat est renvoyé sans évaluation.Lors du stockage du résultat d'un élément indexé dans une variable, il évalue ensuite le résultat.Rappelez-vous que Pour chaque ({valeur, index}, liste, expression... ) est équivalent à Pour( index = 1, index <= N Items( liste ), index++, valeur = liste[index]; expression... )
A = {1 + 2, 2 + 3, 3 + 4};
b = {};
res = A[1];
Insert Into( b, A[1] );
Insert Into( b, res );
b
/*:
{1 + 2, 3}
Re : Différence entre les boucles FOR et FOR EACHOui, c'est ça.
C'est un comportement étrange, puisque 1. nous avons l'instruction For Each Row pour l'évaluation par ligne, et 2. For Each devrait traiter une liste (et j'essaie de travailler avec une liste de références à des colonnes) de la même manière que la boucle For.
Est-ce un bug ou est-ce un comportement intentionnel ?
Re : Différence entre les boucles FOR et FOR EACHJe suppose que les colonnes sont évaluées en valeurs de lignes actuelles dans For Each (vous pouvez tester cela en ajoutant Row() = 1 ; par exemple). Vous pourrez peut-être éviter cela en utilisant Name Expr()
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Fitness.jmp");
col = {:Runtime, :RunPulse, :RstPulse};
y expr = Expr(Y());
For(c = 1, c <= N Items(col), c++,
Insert Into(y expr, col[c]);
);
Show(Name Expr(y expr));
Row() = 1;
y expr = Expr(Y());
For Each({coll, index}, col,
Insert Into(y expr, coll);
);
Show(Name Expr(y expr));
y expr = Expr(Y());
For Each({coll, index}, col,
Insert Into(y expr, Name Expr(coll));
);
Show(Name Expr(y expr));