"Introduction to Caml" Camlの中で、複数の引数関数ではなく、タプルのためにカレー関数定義を使用することをお勧めし、なぜOCamlで引数をタプルするのが好きですか?
注意を言います。
'a * 'b -> 'c
に'a -> 'b -> 'c
呼び出し規約を比較します。
SML/NJで作業するとき、入力と出力の両方にタプルタイプを使用することになりました。('a * 'b) -> ('c * 'd)
タプルを使用して複数の入力を表現すると、複数の出力を表現する方法が対称に見えます。
タプル引数よりもOCaml関数の宣言でカリングが推奨されるのはなぜですか?カリー化/部分的な評価を可能にするだけで柔軟性が増しますか、OCamlコンパイラの実装の詳細から得られる他の利点がありますか?
Caml-light以降のほとんどの関数のカリング選択については、「ZINC実験:ML言語の経済的な実装」のレポートで説明しています。私が覚えていることの1つは、適切な評価スキーム(レポートに記載されている)を使用すると、カリーされた関数は呼び出されるために割り当てを必要としないということです。 http://caml.inria.fr/pub/papers/xleroy-zinc.ps.gz –
@PascalCuoq、タプルを割り当て、展開してGCedする必要はありますか? –
はい、既存のタプル( 'ft')で関数を呼び出すことも意図している場合、短命の一時タプル'(x、y) 'を割り当てて'何を持っているかを知るためには 'x'と' y'だけです。 –