Entiendo los conceptos básicos de la composición de funciones en F #, como, por ejemplo, se describe here.¿Qué me estoy perdiendo: es la composición de funciones con múltiples argumentos posibles?
Tal vez me falta algo. Los >>
y <<
operadores parecen haber sido definido con la suposición de que cada función sólo toma un argumento:
> (>>);;
val it : (('a -> 'b) -> ('b -> 'c) -> 'a -> 'c) = <fun:[email protected]>
> (<<);;
val it : (('a -> 'b) -> ('c -> 'a) -> 'c -> 'b) = <fun:[email protected]>
lo que me gustaría hacer, sin embargo, es algo así como lo siguiente:
let add a b = a + b
let double c = 2*c
let addAndDouble = add >> double // bad!
Pero aunque la salida add
es del tipo requerido para la entrada double
, es rechazada.
sé que puedo reescribir añadir con el argumento una tupla:
let add (a,b) = a + b
O puedo escribir un nuevo operador para cada número de posibles argumentos a la primera función:
let inline (>>+) f g x y = g (f x y)
let doubleAdd = add >>+ double
Pero parece tonto! ¿Hay una mejor manera que me he perdido?
acuerdo, estilo ojival es a menudo más fácil de leer. – Laurent
Especialmente cuando comienzas a tener que "voltear" tus funciones. –