纯函数的语法类似于(1+#1+#2)&[a,b]
,它提供1+a+b
。现在我想提供一些看起来像{a,b}
的函数的输出到上面的函数,比如像(1+#1+#2)&{a,b}
,但是语法正确,因为这显然不起作用。我该怎么做呢?
答案 0 :(得分:8)
最简单的方法是使用Apply
(@@
):
In[4]:= (1 + #1 + #2) & @@ {a, b}
Out[4]= 1 + a + b
答案 1 :(得分:4)
要提供一些替代方案,如果更方便,您还可以在函数中包含Apply
:
f = (1 + # + #2) & @@ # &;
f @ {a, b}
1 + a + b
您可以选择手动索引零件:
f = (1 + #[[1]] + #[[2]]) &;
最后,您可能已经知道这一点,但对于其他人来说,这个问题是:
g[{x_, y_}] := 1 + x + y
g @ {a, b}
1 + a + b
答案 2 :(得分:3)
这是一个普通函数的版本(即可以使用方括号),它将采用任意列表。 Apply
已在函数内移动,##
表示SlotSequence
(c.f。_
和__
模式匹配)
In[1]:= (1 + ##&@@ #) &[{a, b}]
(1 + ##&@@ #) &[{a, b, c, d, e}]
Out[1]= 1 + a + b
Out[2]= 1 + a + b + c + d + e