Ввод списка в чистую функцию - PullRequest
5 голосов
/ 06 апреля 2011

Синтаксис для чистой функции - что-то вроде (1+#1+#2)&[a,b], что дает 1+a+b.Теперь я хочу передать выходные данные какой-либо функции, которая выглядит как {a,b} для функции выше, то есть что-то вроде (1+#1+#2)&{a,b}, но с правильным синтаксисом, поскольку это, очевидно, не работает.Как мне это сделать?

Ответы [ 3 ]

8 голосов
/ 06 апреля 2011

Самый простой подход - использовать Apply (@@):

In[4]:= (1 + #1 + #2) & @@ {a, b}

Out[4]= 1 + a + b
4 голосов
/ 06 апреля 2011

Чтобы предоставить некоторые альтернативы, вы также можете включить 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
3 голосов
/ 06 апреля 2011

Вот версия, которая является обычной функцией (то есть может использовать квадратные скобки), которая будет принимать произвольный список. Apply было перемещено внутри функции, а ## означает SlotSequence (например, _ и __ в сопоставлении с образцом)

In[1]:= (1 + ##&@@ #) &[{a, b}]
        (1 + ##&@@ #) &[{a, b, c, d, e}]

Out[1]= 1 + a + b

Out[2]= 1 + a + b + c + d + e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...