Aquí es código que funciona bien:¿Es posible en F # curry un argumento de función central?
let f x y z = x + y + z
let g x y = f x y
let h x z = z |> f x
Por lo tanto, se puede escribir la expresión "h1", y muestra FSI:
val it : (int -> int -> int) = <fun:[email protected]>
Si llamo "h 1 2 3", se aplican los argumentos en el orden correcto.
Pero si el último argumento tiene un tipo diferente, las cosas se ponen diferentes:
let ff x y (z : string) = x + y
let gg x y = ff x y
let hh x (z : string) = z |> ff x
Ahora la última hh función hace que un mensaje de error:
Script.fsx (119,10): FS0001 de error : No coincide con el tipo Esperando un
string -> 'a
pero dado unint -> string -> int
. El tipostring
no coincide con el tipoint
entiendo por qué sucede esto - "z" se añade al "ff x" por lo que es un segundo argumento. Pero entonces esperaría que la primera expresión de ejemplo "h 1 2 3" no funcione correctamente (se ejecute como "f 1 3 2"). Pero funciona bien.
¿Seguro que 'h 1 2 3' se ejecuta como' f 1 2 3' y no 'f 1 3 2'? Después de todo, 1 + 2 + 3 == 1 + 3 + 2 == 6. ¿Tal vez intentar con un operador no transitivo? – tzaman
FWIW, los argumentos etiquetados de OCaml le permiten aplicar parcialmente fuera de servicio. –