Это всего лишь карри версия вашей функции.Чтение такой функции зависит от того, насколько вы удобны с каррированной нотацией для функций.
Суть в том, что с двумя аргументами - это совершенно другое понятие, чем с парой аргументов в том смысле, что пара делает ссылку на конструктор определенного типа (что скрыто под символами *
и ,
в вашем фрагменте ocaml).
Что делать, если вы не хотите ссылаться на конструкцию Pairing (или tupling , если вам нужен произвольный массив аргументов)?Карри ответ на этот вопрос - тот, который использует функции высшего порядка :
val make_pair_int : int -> int -> int * int = <fun>
| | | | | \_____/ \__/
| | | | | | ` and all that is a higher-order function
| | | | | ` a pair of integers
| | | | `and returns
| | | `a function that takes an integer as an argument
| | `and returns
| ` something that takes an integer as an argument
` symbol make_pair_int is bound to
С неявным соглашением, что эта карри интерпретация (и обозначение, которое идет с ним)это допустимый способ восприятия функции, принимающей несколько аргументов, вы можете просто посчитать количество стрелок в типе и считать те, которые стоят перед последним, как «аргументы» вашей функции.