Вам просто нужно определить символ для таких приложений:
let (@@@) f x = f x ;;
И тогда
let f x = x * 4;;
let g y = y + 2;;
let a = f @@@ g 3;;
print_int a;;
делает Распечатайте 20.
Обратите внимание, что в следующей версии OCaml (3.13 или 4.00) обеспечит встроенные примитивы для приложений, которые не создавать промежуточные частично применяемые функции:
external (@@@) : ('a -> 'b) -> 'a -> 'b = "%apply"
external (|>) : 'a -> ('a -> 'b) -> 'b = "%revapply"
Последнее, что противоположно %apply
:
print_int (3 |> g |> f);;
Обратите внимание, что вы не можете использовать ($), как это левоассоциативные в определении 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 *)
Вы можете просто определить оператор «$», как в Haskell: пусть ($) fx = fx ;; – aneccodeal
Нет, на самом деле, вы не можете использовать '$'. Он работает для этого базового примера, но не если вы попробуете 'f $ g $ h x' –