Mathematica没有评估#1

时间:2012-02-18 19:01:25

标签: wolfram-mathematica

我定义了两个对象:

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

为什么这样:

f /. x -> #1 &[5]

给我预期的结果:

25

但是这个:

f /. g &[5]

给了我:

#1^2

好像#1未被评估为5。 请帮忙。

3 个答案:

答案 0 :(得分:2)

您可以通过将纯函数组件保持在一起来使其工作。

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

f/. g[5]

25

在映射之前通过列表运行它。

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}

根据巫师先生的回答,这可以成为:

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}

答案 1 :(得分:2)

Function(简称&)具有属性HoldAll

Attributes[Function]
{HoldAll, Protected}

因此g仍未评估。您可以使用Evaluate

强制它
Evaluate[f /. g] &[5]
25

Evaluate不会在表达式中更深入地工作;你不能写f /. Evaluate[g] &

答案 2 :(得分:0)

g=x->#1替换为g=x->#1 &,将f /. g &[5]替换为f/. g[5]