海德評估其論點嗎?從使用 JSL 開發高效、強大的應用程式 (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」—即評估參數後的結果?!?!為什麼它不分配() ?
自動化和腳本編寫回覆: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#

回覆:Head 評估其論點嗎?啊,好吧,腳本索引很清楚。
因此,現在的行為與列表中所示的不同。背後並無隱藏的秘密。
一般來說,如果 JSL 編輯器使用一些突出顯示來區分在執行函數之前計算的參數和未計算的參數,則可以使腳本編寫變得更加容易:
JSL 編輯器中的高級語法突出顯示
回覆:Head 評估其論點嗎?與Narg相同 - 參數被求值(1x,與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)))); //Add回覆: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")));簡單的解決方案:使用Name Expr包裝As Column :
Distribution(Column(Name Expr(As Column("age")))); ...或在適用的情況下使用 Column() 而不是 As 列:
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"))); // works回覆:Head 評估其論點嗎?
@hogi寫道:
參數被求值(1x,就像Name Expr() 一樣)
對不起:
就像Name Expr()一樣
頭():

意思是: 「表達式Arg可以是
1) 包含表達式的名稱 - Head 將使用表達式,
2) 一個表達式 - Head 將計算它並使用結果作為輸入
3) 或由 Expr() 引用的文字表達式 - 並且 Head 將採用文字表達式」。
名稱表達式():
"the expressionArg can be
1) 包含表達式的名稱 - 並且 Name Expr 將使用表達式,
2) 一個表達式 - Name Expr 將採用該表達式」。
Name Expr(1+2); // 1 + 2
Head(1+2); // 3
回覆:Head 評估其論點嗎?其他函數,如 Head()[ID=7]
- 頭()
- NArg()
- 精胺酸()
- 為空()
- 列印()
- 展示()
- 寫()
回覆:Head 評估其論點嗎?評估其參數的函數:
[ID=2]
幾乎所有功能...
大多數“是...”功能:
- 是 Expr()
- 是矩陣()
- 是列表()
- 是數字()
- 是命名空間()
- 命名空間存在()
很高興知道:
評估參數 > 第一個:
回覆:Head 評估其論點嗎?行為類似Name Expr() 的函數:
[ID=3]
「這 表達精胺酸 可以是
1) 包含表達式的名稱 - 並且 Name Expr 將使用表達式,
2) 一個表達式 - Name Expr 將採用表達式」。
- Name Expr()
- NArg()
- Extract Expr() [兩個參數] *)
*)太酷了!
x= Expr(Print(1));
Extract Expr(x, x) // Print(1)
回覆:Head 評估其論點嗎?其他函數,如 Head()
[ID=7]
「這 表達精胺酸 可以是
1) 包含表達式的名稱 - Head 將使用表達式,
2) 一個表達式 - 主管將評估 它並將使用結果作為輸入
3) 或由 Expr() 引用的文字表達式 - 並且 Head 將採用文字表達式」。
- 頭()
- NArg()
- 精胺酸()
- 為空()
- 列印()
- 展示()
- 寫()
回覆:Head 評估其論點嗎?#ExpressionInspector
回覆:Head 是否評估了它的論點?另一個問題:
為什麼 Type 要評估其論點?
Type(Char(1)) // String !!