Mathematica没有评估#1

问题描述 投票:3回答:3

我定义了2个对象:

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

为什么这样:

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

给我预期的结果:

25

但是这个:

f /. g &[5]

给我:

#1^2

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

wolfram-mathematica
3个回答
2
投票

Function(简称&)有HoldAll属性:

Attributes[Function]
{HoldAll, Protected}

因此,g仍然没有评估。你可以用Evaluate强制它:

Evaluate[f /. g] &[5]
25

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


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}

在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}


0
投票

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.