Все мы знаем, что в функциональном программировании все фукнции — одного аргумента. «Функции нескольких аргументов» это функции одного аргумента, которые возвращают функции меньшего на 1 числа аргументов.
Также мы все знаем, что в OCaml, «функции нескольких аргументов» компилируются в реальные функции нескольких аргументов, а частичное применение обеспечивается с помощью специальной конструкции: замыкания, которое является структурой, содержащей адрес вызываемой функции и часть аргументов, которые уже были фиксированы.
Так вот. По наивности душевной я думал, что на одну функцию может создаваться одна структура-замыкание, в которой могут быть заполнены 1 или более аргументов.
Недавно прочитал, что до версии 4 все замыкания были только от одного аргумента! Если функция была более чем от двух аргументов, то при частичном применении создавалась цепочка замыканий, а при окончательном вызове эта цепочка раскручивалась для получения всех аргументов.
Э — эффективность.