一部の関数言語では、部分的に適用される関数とカルト関数は、2つの類似しているが異なる概念です。ハスケルで部分的なアプリケーションとカリングの概念は交換可能ですか?
本はLearn You a Haskell for Great Goodという本を読んで、これらは同じ意味で適用されているようです。
[カリング関数] Haskellのすべての関数は、公式に1つのパラメータしか取りません。
...
我々はあまりにもいくつかのパラメータを持つ関数を呼び出す場合、私たちは取り残さできるだけ多くのパラメータをとる関数を意味し、部分的に適用された機能を取り戻します。
私の質問は:ハスケルで部分的なアプリケーションとカリングの概念は交換可能ですか?
正直な答えは短く、はいです。 – hao
私にとって、「カリング」は関数定義と関係があるのに対し、「部分アプリケーション」は関数呼び出しと関係がある。したがって、彼らは*正確には交換可能ではありませんが、彼らは同じコインの裏返しであり、どちらも他のものなしでは有意義ではありません。いくつかの関数型言語で「類似しているが区別されている」と言いますと、正確には何を指していますか? – ruakh
* typeシステム*は排他的にカリー化された単項関数を扱いますが、GHCの生成コード*の関数は複数の引数をとることに注意してください。クロージャは、部分的に適用される関数に対してのみ割り当てられます。これは、コードがカリー化された解釈の下でタイプチェックされているため可能です。これは、世話していない解釈に対する同形*です。つまり、型保存の最適化です。 –