Wolfram mathematica Mathematica不评估#1

Wolfram mathematica Mathematica不评估#1,wolfram-mathematica,Wolfram Mathematica,我定义了两个对象: f=x^2 g=x->#1 为什么会这样: f /. x -> #1 &[5] 给我一个预期的结果: 25 但这是: f /. g &[5] 给我: #1^2 好像#1没有被评估为5。 请提供帮助。您可以通过将纯功能组件保持在一起使其正常工作 f = x^2 g = x -> #1 & f/. g[5] 二十五 在映射之前,在函数的列表上运行它 f = x^2 g = x -> #1 list = {1, 2, 3

我定义了两个对象:

f=x^2
g=x->#1
为什么会这样:

f /. x -> #1 &[5]
给我一个预期的结果:

25
但这是:

f /. g &[5]
给我:

#1^2
好像#1没有被评估为5。
请提供帮助。

您可以通过将纯功能组件保持在一起使其正常工作

f = x^2
g = x -> #1 &

f/. g[5]
二十五

在映射之前,在函数的列表上运行它

f = x^2
g = x -> #1
list = {1, 2, 3, 4, 5};
b = Block[{a}, Function[f /. a] /. a -> g]
Map[b, list]
{1,4,9,16,25}

对于评论中的具体问题

vars = {x, y};
f = x + y;
g = Table[vars[[i]] -> Slot[i], {i, 1, Length[vars]}];
b = Block[{a}, Function[f /. a] /. a -> g];
list = {{1, 2}, {3, 4}, {5, 6}};
Map[b[Sequence @@ #] &, list]
{3,7,11}

根据Wizard先生的回答,这可以变成:

vars = {x, y};
f = x + y;
g = Table[vars[[i]] -> Slot[i], {i, 1, Length[vars]}];
list = {{1, 2}, {3, 4}, {5, 6}};
Map[Evaluate[f /. g] &[Sequence @@ #] &, list]
{3,7,11}

(缩写
&
)具有以下属性:

因此,
g
未被评估。您可以使用以下命令强制执行:


Evaluate
无法在表达式中更深入地工作;不能写入
f/。用
g=x->1&
f>替换
g=x->1
。g&[5]
f/。g[5]

与Mathematica一样,将表达式包装在Trace[]中并检查输出在这里很有指导意义。谢谢。但是,我怎样才能修改给我错误结果的语句,使其按预期工作呢?我真的是一个数学初学者,所以我不知道大多数事情。好的,问题是:映射[f/{x->{1}&,list]好的,问题是,我想做这样的事情:vars={x,y};f=x+y;g=表[vars[[i]]->槽[i],{i,1,长度[vars]}];列表={1,2},{3,4},{5,6};映射[f/.g&,list];得到{5,7,11}这是因为f是来自用户的一些表达式,变量是变量列表,所以我不能硬编码变量。太好了,谢谢。有一件事我不明白:你给b区发送了一个序列。因此,序列被理解为该块的参数列表?@user1161552-函数b期望输入为序列,例如b[1,2],并且不会接受类似b[{1,2}]的列表。应用序列将输入格式化为b[1,2]。块只是用来屏蔽“a”,以防“a”在其他任何地方被定义,这会破坏替换。如果查看FullForm[b],您将看到块已消失。有趣的是,我没有尝试在Evaluate中包装更完整的表达式。
Attributes[Function]
{HoldAll, Protected}
Evaluate[f /. g] &[5]
25