Conseil JSL: Affectations multiplesUne fonctionnalité souvent négligée du langage de script JMP est la possibilité d'attribuer des valeurs à plusieurs variables dans une seule instruction d'affectation. Un exemple de base est:
// assigne 1 à x et 100 à y
{x, y} = {1,100};
La syntaxe est particulièrement utile lorsque les valeurs des variables dépendent des valeurs précédentes. Par exemple, un moyen simple (et rapide) d’échanger les valeurs de deux variables est le suivant:
// échange x et y
{x, y} = Liste d'évaluation ({y, x});
Ici, vous pouvez voir l’avantage de l’affectation multiple. Sans cela, vous devez ajouter une variable temporaire et utiliser trois instructions d'affectation. Liste d'évaluation est nécessaire car, lorsque JMP évalue une liste, il n'évalue pas les membres de la liste, par défaut.
Une autre utilisation est lorsque vous effectuez un calcul itératif sur deux variables ou plus dépendantes. Euclid's plus grand diviseur commun L'algorithme est l'un de ces calculs.
// Le plus grand commun diviseur de deux entiers
gcd = Fonction ({a, b},
tandis que (b! = 0,
{a, b} = Liste d'évaluation ({b, Mod (a, b)});
)
une
)
gcd (45, 60); // 15
Insérer un Montrer (a, b) déclaration après l'affectation pour voir comment fonctionne l'algorithme.
Mark Bailey a écrit: J'utilise souvent cet idiome, depuis que j'ai appris ... Mark Bailey a écrit:
J'utilise souvent cet idiome, car j'ai appris que les listes pouvaient servir de valeur L. Les listes permettent un code efficace, compact et lisible. Voici deux des utilisations courantes pour moi:
// intervalle de confiance de la moyenne
échantillon N = 10;
échantillon = J (échantillon N, 1, normal aléatoire (10, 1));
yBar = moyenne (échantillon);
sdY = Std Dev (échantillon);
{lo95% CI, hi95% CI} = Arrondi (
yBar + {-1, 1} t Quantile (0,975, échantillon N-1) sdY / Sqrt (sampleN),
2
)
Show (lo95% CI, hi95% CI);
// échelle des y
{yMin, yMax} = Round (
yBar + {-4,5, 4,5} * (Maximum (échantillon) - Minimum (échantillon)),
1
)
Show (yMin, yMax);