Vous avez juste à définir un symbole pour de telles applications:
let (@@@) f x = f x ;;
Et puis
let f x = x * 4;;
let g y = y + 2;;
let a = f @@@ g 3;;
print_int a;;
ne imprime 20.
Notez que la prochaine version de OCaml (3,13 ou 4,00) fournira des primitives BUILTIN pour les applications qui permettent d'éviter la création de fonctions intermédiaires partiellement appliquées:
external (@@@) : ('a -> 'b) -> 'a -> 'b = "%apply"
external (|>) : 'a -> ('a -> 'b) -> 'b = "%revapply"
le dernier est à l'opposé de %apply
:
print_int (3 |> g |> f);;
Notez que vous ne pouvez pas utiliser ($) comme il est laissé associatif dans la définition de l'analyseur 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 *)
Vous pouvez définir juste un opérateur « $ » comme dans Haskell: laisser ($) fx = fx ;; – aneccodeal
Non, en fait, vous ne pouvez pas utiliser '$'. Cela fonctionne pour cet exemple basique, mais pas si vous essayez 'f $ g $ h x' –