海德评估其论点吗?从使用 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”——即评估参数后的结果?!?!为什么不是allocate() ?
自动化和脚本编写回复: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")));简单的解决方案:用名称 Expr包装As Column :
Distribution(Column(Name Expr(As Column("age")))); ...或者在适用的情况下使用 Column() 代替 As 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"))); // 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()[编号=7]
- 头()
- NArg()
- 参数()
- 为空()
- 打印()
- 展示()
- 写()
回复: Head 是否评价了它的论点?评估其参数的函数:
[编号=2]
几乎所有功能...
大多数“是...”功能:
- 是 Expr()
- 是矩阵()
- 是列表()
- 是數字()
- 是命名空间()
- 命名空间存在()
值得了解的是:
评估参数>第一个:
回复: Head 是否评价了它的论点?行为类似于Name Expr() 的函数:
[编号=3]
“这 表达式Arg 可以
1) 包含表达式的名称 - 并且 Name Expr 将使用该表达式,
2) 表达 - 并且 Name Expr 将采用表达式“。
- Name Expr()
- NArg()
- 提取 Expr() [两个参数] *)
*)太酷了!
x= Expr(Print(1));
Extract Expr(x, x) // Print(1)
回复: Head 是否评价了它的论点?其他函数如 Head()
[编号=7]
“这 表达式Arg 可以
1)一个包含表达式的名称 - Head 将使用该表达式,
2) 表达 - 并且主管将评估 并将使用结果作为输入
3) 或 Expr() 引用的文字表达式 - Head 将采用文字表达式”。
- 头()
- NArg()
- 参数()
- 为空()
- 打印()
- 展示()
- 写()
回复:Head 是否评价了它的论点?#表达式检查器
回复:Head 是否评估了它的论点?另一个问题:
为什么 Type 要评估其论点?
Type(Char(1)) // String !!