我定义了两个对象:
f=x^2
g=x->#1
为什么这样:
f /. x -> #1 &[5]
给我预期的结果:
25
但是这个:
f /. g &[5]
给了我:
#1^2
好像#1未被评估为5。 请帮忙。
答案 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)
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]