我定义了2个对象:
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]
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}
用g=x->#1
替换g=x->#1 &
和f /. g &[5]
和f/. g[5]