Bewertet Head sein Argument?Aus Using JSL to Develop Efficient, Robust Applications (EU 2018 415) habe ich gelernt, dass es einige Funktionen gibt, die ihre Argumente auswerten, und andere, die dies nicht tun:

Ich habe mich über Head gewundert. Hier sieht alles logisch aus ...
f= Expr(x=2);
Substitute(NameExpr(f),Expr(x), Expr(y));
Head(f);
Head ist nicht wie Substitute, ich kann den Funktionsnamen direkt als Argument verwenden – und Head gibt den Kopf des Ausdrucks zurück: Assign()
Nachdem ich einige andere Funktionen überprüft habe, die „ihr Argument nicht auswerten“:
Expr(x=2); // x=2
Name Expr(x=2); // x=2
Lassen Sie uns das Ergebnis überprüfen
Head(x=2)
welches ist „2“ – also das Ergebnis nach Auswertung des Arguments?!?! Warum ist es nicht „assign()“ ?
Automatisierung und SkripterstellungBetreff: Bewertet Head sein Argument?
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#

Betreff: Bewertet Head sein Argument?Ah, ok, der Skriptindex ist sehr klar.
Daher ist das Verhalten heutzutage anders als in der Liste angegeben. Dahinter steckt kein verborgenes Geheimnis.
Im Allgemeinen könnte es die Skripterstellung erheblich erleichtern, wenn der JSL-Editor einige Hervorhebungen verwenden würde, um zwischen Argumenten, die ausgewertet werden, und Argumenten, die nicht ausgewertet werden, vor der Ausführung der Funktion zu unterscheiden:
Erweiterte Syntaxhervorhebung im JSL-Editor
Betreff: Bewertet Head sein Argument?dasselbe gilt für Narg - das Argument wird ausgewertet (1x, wie bei Name Expr()
(angepasst aus dem Skripthandbuch)
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)))); //AddBetreff: Bewertet Head sein Argument?Dieses Name Expr -ähnliche Verhalten ist besonders nützlich für die Fälle mit
- Als Spalte(...)
- Spaltenreferenz über Variable ( col )
als Argument.
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 ) ));
Zum anderen: Funktionen die nicht funktionieren, wenn eine Spalte per As Column() eingegeben wird:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = Name Expr(As Column("age"));
Distribution(Column(As Column("age")));Die einfache Lösung: Umschließen Sie As Column mit Name Expr :
Distribution(Column(Name Expr(As Column("age")))); ... oder verwenden Sie ggf. Column() statt As column:
Distribution(Column(Column("age")));
Um zwischen beiden Fällen zu unterscheiden, können Sie am Anfang des Arguments ein print(1); einfügen:
dt << Graph Builder(Variables( X( Print(1);As Column ("age") ) ),Elements( Points( X ) )); // fails
Distribution(Column(Print(1);Column("age"))); // worksBetreff: Bewertet Head sein Argument?
@hogi schrieb:
das Argument wird ausgewertet (1x, wie bei Name Expr() )
Entschuldigung:
wie mit Name Expr()
Kopf():

bedeutet: "der AusdruckArg kann
1) ein Name, der einen Ausdruck enthält - und Head wird den Ausdruck verwenden,
2) ein Ausdruck - und Head wird ihn auswerten und das Ergebnis als Eingabe verwenden
3) oder ein wörtlicher Ausdruck, der durch Expr() zitiert wird – und Head übernimmt den wörtlichen Ausdruck“.
Name Ausdruck():
"the expressionArg can be
1) ein Name, der einen Ausdruck enthält - und Name Expr verwendet den Ausdruck,
2) ein Ausdruck - und Name Expr übernimmt den Ausdruck".
Name Expr(1+2); // 1 + 2
Head(1+2); // 3
Betreff: Bewertet Head sein Argument?Andere Funktionen wie Head()[ID=7]
- Kopf()
- NArg()
- Arg()
- Ist leer()
- Drucken()
- Zeigen()
- Schreiben()
Betreff: Bewertet Head sein Argument?Funktionen, die ihre Argumente auswerten:
[ID=2]
fast alle Funktionen...
die meisten "ist ..."-Funktionen:
- Ist Expr()
- Ist Matrix()
- Ist List()
- Ist Zahl()
- Ist Namespace()
- Namespace existiert ()
Gut zu wissen:
- Gleich() (==)
- Parsen()
- Assoziatives Array()
Argumente auswerten > 1.:
- Ersetzen durch()
- Einfügen in()
- Entfernen von()
- Zuordnen()
- Arg()
Betreff: Bewertet Head sein Argument?Funktionen, die sich wie Name Expr() verhalten:
[ID=3]
"Die AusdruckArg kann sein
1) ein Name, der einen Ausdruck enthält - und Name Expr verwendet den Ausdruck,
2) ein Ausdruck - und Name Expr nimmt den Ausdruck an".
- Name Expr()
- NArg()
- Extract Expr() [beide Argumente] *)
*) so cool!
x= Expr(Print(1));
Extract Expr(x, x) // Print(1)
Betreff: Bewertet Head sein Argument?Andere Funktionen wie Head()
[ID=7]
"Die AusdruckArg kann sein
1) ein Name, der einen Ausdruck enthält - und Head wird den Ausdruck verwenden,
2) ein Ausdruck - und Head wird bewerten es und wird das Ergebnis als Eingabe verwenden
3) oder ein wörtlicher Ausdruck, der durch Expr() zitiert wird – und Head übernimmt den wörtlichen Ausdruck“.
- Kopf()
- NArg()
- Arg()
- Ist leer()
- Drucken()
- Zeigen()
- Schreiben()
Betreff: Bewertet Head sein Argument?#Ausdrucksinspektor
Betreff: Bewertet Head sein Argument?Noch eine Frage:
Warum bewertet Type sein Argument?
Type(Char(1)) // String !!