"Introduction to Caml" dice¿Por qué prefiere currying to tuple arguments en OCaml?
Nota, en Caml es mejor usar las definiciones de funciones al curry para las funciones múltiples de argumentos, no tuplas.
al comparar las convenciones de llamada 'a -> 'b -> 'c
al .
Al trabajar con SML/NJ me acostumbré a utilizar tipos de tupla para entrada y salida: ('a * 'b) -> ('c * 'd)
, por lo que el uso de tuplas para expresar múltiples entradas parece simétrico con la forma en que expreso múltiples salidas.
¿Por qué se recomienda el currying para declaraciones de función OCaml sobre argumentos tuple? ¿Es solo la mayor flexibilidad que proporciona el permitir currying/parcial evaluación, o hay algún otro beneficio que se deriva de los detalles de implementación del compilador OCaml?
La elección de currying la mayoría de las funciones en Caml-light y las versiones posteriores se explica en el informe "El experimento ZINC: una implementación económica del lenguaje ML". Una cosa que recuerdo es que con el esquema de evaluación adecuado (descrito en el informe), una función curried no requiere asignación para ser llamado. http://caml.inria.fr/pub/papers/xleroy-zinc.ps.gz –
@PascalCuoq, mientras que una tupla necesita ser asignada, desempaquetada y luego convertida en GC? –
Sí, si la función también está destinada a ser llamada con tuplas preexistentes ('ft'), no hay forma de evitar el hecho de que se debe asignar una tupla temporal efímera' (x, y) 'para aplicar' f' a cuando lo que uno tiene es solo 'x' y' y'. –