"Introduction to Caml" говоритПочему вы предпочитаете использовать кортеж аргументов в OCaml?
Обратите внимание, в Caml, лучше использовать выделанное определение функций для нескольких аргументов функций, а не кортежи.
при сравнении 'a -> 'b -> 'c
, вызывающий соглашения до 'a * 'b -> 'c
.
При работе с SML/NJ я привык использовать типы кортежей для ввода и вывода: ('a * 'b) -> ('c * 'd)
, поэтому использование кортежей для выражения нескольких входов кажется симметричным тем, как я выражаю несколько выходов.
Почему currying рекомендуется для деклараций функций OCaml над аргументами в кортеж? Является ли это большей гибкостью, обеспечивающей каррирование/частичную оценку, или есть ли какая-то другая польза, которая вытекает из деталей реализации компилятора OCaml?
. Выбор каррирования большинства функций в Caml-свете и последующих версиях объясняется в отчете «Эксперимент ZINC: экономичная реализация языка ML». Одна вещь, которую я помню, заключается в том, что при правильной схеме оценки (описанной в отчете) функция curried не требует выделения для вызова. http://caml.inria.fr/pub/papers/xleroy-zinc.ps.gz –
@PascalCuoq, тогда как кортеж должен быть выделен, распакован, а затем GCed? –
Да, если функция также предназначена для вызова с уже существующими кортежами ('ft'), нет никакого способа избежать того, что кратковременный временный кортеж' (x, y) 'должен быть назначен для применения' f', когда у кого есть только 'x' и' y'. –