Head valuta la sua argomentazione?Da Using JSL to Develop Efficient, Robust Applications (EU 2018 415) , ho imparato che ci sono alcune funzioni che valutano il loro argomento e altre che non lo fanno:

Mi chiedevo di Head. Qui tutto sembra logico...
f= Expr(x=2);
Substitute(NameExpr(f),Expr(x), Expr(y));
Head(f);
Head non è come Substitute, posso usare direttamente il nome della funzione come argomento - e Head restituisce l'intestazione dell'espressione: Assign()
Dopo aver controllato alcune altre funzioni che "non valutano il loro argomento":
Expr(x=2); // x=2
Name Expr(x=2); // x=2
controlliamo il risultato per
Head(x=2)
che è "2" - cioè il risultato dopo aver valutato l'argomento?!?! perché non èassign() ?
Automazione e scriptingRe: Il capo valuta la sua argomentazione?
Names Default To Here(1);
{a, b, c} = {1, 2, 3};
Head(Expr(Sum(a, b, c)));
HeadExpr(Sum(a, b, c)); // Deprecated
Head(Sum(a, b, c));
https://www.jmp.com/support/help/en/17.2/#page/jmp/advanced-expressions-macros-and-lists.shtml#

Re: Il capo valuta la sua argomentazione?ah, ok, l'indice degli script è molto chiaro.
Quindi, il comportamento oggigiorno è diverso da quello indicato dall’elenco. Nessun segreto nascosto dietro.
In generale, potrebbe rendere la creazione di script molto più semplice se l'editor JSL utilizzasse alcune evidenziazioni per distinguere tra argomenti valutati e argomenti che non vengono valutati prima dell'esecuzione della funzione:
Evidenziazione avanzata della sintassi nell'editor JSL
Re: Il capo valuta la sua argomentazione?lo stesso per Narg - l'argomento viene valutato (1x, come con Name Expr()
(adattato dalla guida allo scripting)
aExpr = {a+b,c,d,e+f+g};<BR />
Show(NArg(aExpr)); //4
Show(NArg(Arg(aExpr,4))); // 3
Show(NArg(Add(1,2,3,4))); // 0
Show(NArg(Expr(Add(1,2,3,4)))); //4
Show(Head(aExpr)); //List()
Show(Head(Arg(aExpr,4))); // Add()
Show(Head(Add(1,2,3,4))); // 10
Show(Head(Expr(Add(1,2,3,4)))); //AddRe: Il capo valuta la sua argomentazione?questo comportamento simile a Name Expr è particolarmente utile per i casi con
- Come colonna(...)
- riferimento alla colonna tramite variabile ( col )
come argomento.
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = Name Expr(As Column("age"));
Head(As Column("age"));
Head(col);
dt << Recode Column(AsColumn("age"),{1},Target Column(AsColumn("age")));
dt << Recode Column(col,{1},Target Column(col));
dt << Graph Builder(Variables( X( As Column ("age") ) ),Elements( Points( X ) ));
dt << Graph Builder(Variables( X( col) ),Elements( Points( X ) ));
d'altra parte: funzioni che non funzionano se una colonna viene inserita tramite As Column() :
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = Name Expr(As Column("age"));
Distribution(Column(As Column("age")));La soluzione semplice: avvolgi As Column con Name Expr :
Distribution(Column(Name Expr(As Column("age")))); ... oppure usa Column() invece della colonna As dove applicabile:
Distribution(Column(Column("age")));
Per distinguere tra entrambi i casi, puoi inserire print(1); all'inizio dell'argomento:
dt << Graph Builder(Variables( X( Print(1);As Column ("age") ) ),Elements( Points( X ) )); // fails
Distribution(Column(Print(1);Column("age"))); // worksR: Head valuta la propria argomentazione?
@hogi ha scritto:
l'argomento viene valutato (1x, come con Name Expr() )
Scusa:
come con Name Expr()
Testa():

significa: "l' espressioneArg può essere
1) un nome che contiene un'espressione - e Head utilizzerà l'espressione,
2) un'espressione - e Head la valuterà e utilizzerà il risultato come input
3) oppure un'espressione letterale citata da Expr() - e Head accetterà l'espressione letterale".
Nome Expr():
"the expressionArg can be
1) un nome che contiene un'espressione - e Name Expr utilizzerà l'espressione,
2) un'espressione - e Nome Expr prenderà l'espressione".
Name Expr(1+2); // 1 + 2
Head(1+2); // 3
Ri: Head valuta la propria argomentazione?Altre funzioni come Head()[ID=7]
- Testa()
- NArg()
- Argomento()
- È vuoto()
- Stampa()
- Spettacolo()
- Scrivere()
R: Head valuta la propria argomentazione?Funzioni che valutano i propri argomenti:
[ID=2]
quasi tutte le funzioni ...
la maggior parte delle funzioni "è...":
- È Expr()
- La matrice() è
- È List()
- È Numero()
- È Namespace()
- Lo spazio dei nomi esiste()
Buono a sapersi:
- Uguale() (==)
- Analizzare()
- Array associativo()
valutare gli argomenti > 1°:
- Sostituisci Into()
- Inserisci in()
- Rimuovi da()
- Assegnare()
- Argomento()
R: Head valuta la propria argomentazione?Funzioni che si comportano come Name Expr() :
[ID=3]
"IL espressioneArg può essere
1) un nome che contiene un'espressione - e Name Expr utilizzerà l'espressione,
2) un'espressione - e Name Expr assumerà l'espressione".
- Name Expr()
- NArg()
- Estrai Expr() [entrambi gli argomenti] *)
*) Davvero fantastico!
x= Expr(Print(1));
Extract Expr(x, x) // Print(1)
R: Head valuta la propria argomentazione?Altre funzioni come Head()
[ID=7]
"IL espressioneArg può essere
1) un nome che contiene un'espressione - e Head utilizzerà l'espressione,
2) un'espressione - e il Capo valuterà e userà il risultato come input
3) oppure un'espressione letterale citata da Expr() - e Head accetterà l'espressione letterale".
- Testa()
- NArg()
- Argomento()
- È vuoto()
- Stampa()
- Spettacolo()
- Scrivere()
R: Head valuta la propria argomentazione?#IspettoreEspressione
Re: Head valuta la sua argomentazione?Un'altra domanda:
Perché Type valuta il suo argomento?
Type(Char(1)) // String !!