如何在mathematica中区分多级纯函数中的槽

时间:2011-01-27 06:33:27

标签: wolfram-mathematica

例如,我可能有

{1, 2, 3, 4, 5} // Select[#1, ((*** + 1 &) > 2) &] &

在这里,***也希望成为#1,但不被认为是最外层的#1。有没有办法区分这两个?

感谢。

2 个答案:

答案 0 :(得分:6)

我不确定我理解这个问题。您的预期输出是什么?... {2,3,4,5}?...如果是这样,插槽之间没有逻辑混淆:列表中Select的第一个参数的每个元素都将被输入一个函数(第二个参数)。以下工作正常:

{1, 2, 3, 4, 5} // Select[#, ((# + 1) > 2) &] &

如果出现冲突,而不是插槽/符号表示法,您可以使用Function[{x,y,...},...]表示法,例如

{1, 2, 3, 4, 5} // Select[#, Function[{x}, (x + 1) > 2]] &

答案 1 :(得分:3)

您的代码中有一个太多的&符号,请尝试

{1, 2, 3, 4, 5} // Select[#1, ((# + 1) > 2) &] &

这种方式#1从列表中选取一个元素并将其传递给比较测试函数。因此,实际上#1#会获得相同的元素。

((# + 1&) > 2)&作为比较函数没有任何意义,因为外部函数无法传递它的参数。你已经有效地编写了(F > 2)&,即使F是一个纯函数,它的参数也没有插槽。对于你的工作方式,你必须写((# + 1&[#]) > 2)&,这相当于(F[#] > 2)&