Simplemente tiene que definir un símbolo para tales aplicaciones:
let (@@@) f x = f x ;;
Y luego
let f x = x * 4;;
let g y = y + 2;;
let a = f @@@ g 3;;
print_int a;;
se imprime 20.
Tenga en cuenta que la próxima versión de OCaml (3,13 o 4,00) proporcionará primitivas incorporadas para aplicaciones que evitan la creación de funciones intermedias aplicadas parcialmente:
external (@@@) : ('a -> 'b) -> 'a -> 'b = "%apply"
external (|>) : 'a -> ('a -> 'b) -> 'b = "%revapply"
el último es lo contrario de %apply
:
print_int (3 |> g |> f);;
Tenga en cuenta que no se puede utilizar ($), ya que es asociativo por la izquierda en la definición del analizador OCaml:
let ($) f x = f x ;;
let a = f $ g 3;; (* ok ! ??? *)
let a = f $ g $ g 3;; (* ERROR -> g is not an integer,
because OCaml computes (f $ g) first *)
Se podía definir un operador '$' como en Haskell: dejar ($) fx = fx ;; – aneccodeal
No, en realidad, no puede usar '$'. Funciona para este ejemplo básico, pero no si intenta 'f $ g $ h x' –