Ответ 1
OCaml не имеет необязательных позиционных параметров, потому что, поскольку OCaml поддерживает currying, если вы не учитываете некоторые аргументы, это выглядит как частичное приложение. Однако для именованных параметров существуют необязательные именованные параметры.
Нормальные именованные параметры объявляются следующим образом:
let foo ~arg1 = arg1 + 5;;
Необязательные именованные параметры объявляются следующим образом:
let odp ?(ftw = "OMG!!") () = print_endline ftw;;
(* and can be used like this *)
odp ~ftw:"hi mom" ();;
odp ();;
Обратите внимание, что за любыми необязательными именованными параметрами должен следовать хотя бы один необязательный параметр, потому что иначе, например, "odp" выше будет выглядеть как частичное приложение.