2011-04-05 32 views
5

La sintaxis para una función pura es algo así como (1+#1+#2)&[a,b], que da 1+a+b. Ahora deseo suministrar la salida de alguna función que se parece a {a,b} a la función anterior, es decir, algo así como (1+#1+#2)&{a,b}, pero con la sintaxis correcta, ya que obviamente eso no funciona. ¿Cómo voy a hacer esto?Lista de entradas a una función pura

+0

posible duplicado de [cómo puedo pasar parámetros almacenados en una lista a la expresión] (http: // stackoverflow .com/questions/5176430/how-can-i-pass-parameters-stored-in-a-list-to-expression) –

Respuesta

8

El método más sencillo es utilizar Apply (@@):

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

Out[4]= 1 + a + b 
+3

Una alternativa es '(1 + ##) & @@ {a, b}' que trabajar con cualquier longitud de la lista. –

4

Para proporcionar algunas alternativas, también se puede incluir el Apply dentro de la función si es más conveniente:

f = (1 + # + #2) & @@ # &; 

f @ {a, b} 
1 + a + b

Opcionalmente, puede indexar piezas manualmente:

f = (1 + #[[1]] + #[[2]]) &; 

Por último, es posible que ya lo saben, pero para otros la lectura de esta pregunta:

g[{x_, y_}] := 1 + x + y 

g @ {a, b} 
1 + a + b
+0

+1 Siempre es un placer examinar sus soluciones. – DavidC

+0

@David, ¡muchas gracias! –

3

Aquí hay una versión que es una función ordinaria (es decir, se puede utilizar corchetes) que tendrá un arbitraria lista. El Apply se ha movido dentro de la función y la ## significa SlotSequence (cf _ y __ en coincidencia de patrones)

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

Out[1]= 1 + a + b 

Out[2]= 1 + a + b + c + d + e 
+1

Es interesante observar que una función pura aceptará un número infinito de argumentos, y el número de vars en 'Función' o el máximo n en' # n' da la cantidad mínima de argumentos requeridos. Sin embargo, '## n' no impone ningún mínimo. – rcollyer

+0

@rcollyer ¿estás seguro? Pruebe: '{## 4} & @@@ Array [Range, 5]' –

+0

@Mr, impar. porque la semana pasada realicé algunos experimentos que parecían indicar que funcionó. volver al tablero de dibujo. – rcollyer

Cuestiones relacionadas