Head はその引数を評価しますか?「Using JSL to Develop Efficient, Robust Applications (EU 2018 415)」から、引数を評価する関数と評価しない関数があることが分かりました。

私はヘッドについて疑問に思いました。ここではすべてが論理的に見えます...
f= Expr(x=2);
Substitute(NameExpr(f),Expr(x), Expr(y));
Head(f);
Head は Substitute とは異なり、関数名を引数として直接使用でき、Head は式の先頭を返します: Assign()
「引数を評価しない」他の関数をいくつかチェックした後:
Expr(x=2); // x=2
Name Expr(x=2); // x=2
結果を確認してみましょう
Head(x=2)
どれが「2」、つまり引数を評価した後の結果ですか?なぜassign()ではないのでしょうか?
自動化とスクリプト作成Re: Head は引数を評価しますか?
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: Head は引数を評価しますか?ああ、わかりました、スクリプトインデックスは非常に明確です。
したがって、最近の動作はリストに示されているものとは異なります。その背後に隠された秘密はありません。
一般に、JSL エディターが関数の実行前に評価される引数と評価されない引数を区別するために何らかの強調表示を使用すると、スクリプト作成がはるかに簡単になります。
JSL エディターでの高度な構文の強調表示
Re: Head は自身の議論を評価しますか?Nargも同様 - 引数は評価される(1回、 Name Expr()と同様)
(スクリプトガイドより抜粋)
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: Head は自身の議論を評価しますか?このName Exprのような動作は、特に次のような場合に便利です。
-列として(...)
- 変数による列参照 ( col )
議論として。
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 ) ));
一方、As Column()経由で列が入力された場合は機能しない関数:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = Name Expr(As Column("age"));
Distribution(Column(As Column("age")));簡単な解決策: As Column をName Exprでラップします。
Distribution(Column(Name Expr(As Column("age")))); ...または、該当する場合は As column の代わりに Column() を使用します。
Distribution(Column(Column("age")));
両方のケースを区別するには、引数の先頭に print(1); を配置します。
dt << Graph Builder(Variables( X( Print(1);As Column ("age") ) ),Elements( Points( X ) )); // fails
Distribution(Column(Print(1);Column("age"))); // worksRe: Head は自身の議論を評価しますか?
@hogi は書きました:
引数が評価される( Name Expr() と同様に1回)
ごめん:
Name Expr()と同様
頭():

意味: 「式Argは
1) 式を保持する名前 - ヘッドは式を使用します。
2) 式 - Headはそれを評価し、その結果を入力として使用します
3) または Expr() で引用されたリテラル式 - Head はリテラル式を受け取ります。
名前Expr():
"the expressionArg can be
1) 式を保持する名前 - Name Expr は式を使用します。
2) 式 - Name Exprは式を受け取ります「」。
Name Expr(1+2); // 1 + 2
Head(1+2); // 3
Re: Head は自身の議論を評価しますか?Head()のような他の関数[ID=7]
- 頭()
- NArg()
- 引数()
- 空です()
- 印刷()
- 見せる()
- 書く()
Re: Head は自身の議論を評価しますか?引数を評価する関数:
[ID=2]
ほぼすべての機能...
ほとんどの「is ...」関数:
- 式() です
- 行列()
- リスト()
- 数値()
- 名前空間()
- 名前空間が存在する()
知っておくと良いこと:
引数を評価する > 1 番目:
Re: Head は自身の議論を評価しますか?Name Expr()のように動作する関数:
[ID=3]
「 式引数 できる
1) 式を保持する名前 - Name Expr は式を使用します。
2) 表現 - Name Exprは式を受け取ります「」。
- Name Expr()
- NArg()
- Expr() [両方の引数] を抽出します*)
*) とてもクール!
x= Expr(Print(1));
Extract Expr(x, x) // Print(1)
Re: Head は自身の議論を評価しますか?Head()のような他の関数
[ID=7]
「 式引数 できる
1) 式を保持する名前 - ヘッドは式を使用します。
2) 表現 - ヘッドは評価します それを入力として使用します
3) または Expr() で引用されたリテラル式 - Head はリテラル式を受け取ります。
- 頭()
- NArg()
- 引数()
- 空です()
- 印刷()
- 見せる()
- 書く()
Re: Head は自身の議論を評価しますか?#式インスペクタ
Re: Head は自身の議論を評価しますか?もう一つの質問:
Type が引数を評価するのはなぜですか?
Type(Char(1)) // String !!