Suggerimento JSL: più assegnazioniUna caratteristica spesso trascurata di JMP Scripting Language è la capacità di assegnare valori a più variabili in una singola istruzione di assegnazione. Un esempio di base è:
// assegna da 1 a xe da 100 a y
{x, y} = {1, 100};
La sintassi è particolarmente utile quando i valori delle variabili dipendono da valori precedenti. Ad esempio, un modo facile (e veloce) per scambiare i valori di due variabili è:
// scambia x e y
{x, y} = Eval List ({y, x});
Qui puoi vedere il vantaggio del compito multiplo. Senza di esso, dovresti aggiungere una variabile temporanea e utilizzare tre istruzioni di assegnazione. Eval List è necessario perché quando JMP valuta un elenco, non valuta i membri dell'elenco, per impostazione predefinita.
Un altro uso è quando si esegue un calcolo iterativo su due o più variabili reciprocamente dipendenti. Euclide massimo comun divisore l'algoritmo è uno di questi calcoli.
// Greatest Common Divisor di due interi
gcd = Funzione ({a, b},
while (b! = 0,
{a, b} = Eval List ({b, Mod (a, b)});
);
un
);
gcd (45, 60); // 15
Inserisci a Mostra (a, b) dichiarazione dopo l'assegnazione per vedere come funziona l'algoritmo.
Mark Bailey ha scritto: io uso spesso questo idioma, dato che mi piace ... Mark Bailey ha scritto:
Uso spesso questo idioma, poiché ho imparato che le liste possono servire come valore L. Le liste rendono il codice efficiente e compatto ma leggibile. Ecco due degli usi comuni per me:
// intervallo di confidenza della media
sampleN = 10;
sample = J (sampleN, 1, Random Normal (10, 1));
yBar = media (campione);
sdY = Dev std (campione);
{IC dello 95%, IC 95%} = Round (
yBar + {-1, 1} t Quantile (0.975, sampleN-1) sdY / Sqrt (sampleN),
2
);
Mostra (lo95% CI, hi95% CI);
// scala dell'asse y
{yMin, yMax} = Round (
yBar + {-4,5, 4,5} * (Massimo (campione) - Minimo (campione)),
1
);
Mostra (yMin, yMax);