"Introduction to Caml" mówiDlaczego wolisz curry do krotki argumentów w OCaml?
Uwaga, w Caml lepiej jest użyć definicji funkcji curry dla funkcji wielu argumentów, a nie krotki.
przy porównywaniu 'a -> 'b -> 'c
konwencje powołanie do 'a * 'b -> 'c
.
Podczas pracy z SML/NJ przyzwyczaiłem się do używania typów krotek dla wejścia i wyjścia: ('a * 'b) -> ('c * 'd)
, więc używanie krotek do wyrażania wielu wejść wydaje się symetryczne ze sposobem wyrażania wielu wyników.
Dlaczego zalecane są curry dla deklaracji funkcji OCaml w argumentach krotkowych? Czy jest to po prostu większa elastyczność, która umożliwia wycinanie/częściową ocenę, czy też jest jakaś inna korzyść, wynikająca z szczegółów implementacji kompilatora OCaml?
Wybór curry większości funkcji w świetle Caml i kolejnych wersjach wyjaśniono w raporcie "Eksperyment ZINC: ekonomiczna implementacja języka ML". Jedną rzeczą, którą pamiętam jest to, że przy odpowiednim schemacie oceny (opisanym w raporcie) funkcja curried nie wymaga przydziału, aby można ją było wywołać. http://caml.inria.fr/pub/papers/xleroy-zinc.ps.gz –
@PascalCuoq, podczas gdy krotka musi zostać przydzielona, rozpakowana, a następnie GCed? –
Tak, jeśli funkcja ma być również wywołana z istniejącymi krotkami ('ft'), nie ma możliwości obejścia krótkiej tymczasowej krotki' (x, y) 'do zastosowania' f' to, kiedy to, co masz, to tylko 'x' i' y'. –