私はハスケルを学んでいます。私は、Haskellのどの関数も引数を1つしか取れないことを知っておく必要があります。だから、もしあなたが関数を見たらmax 2 4
;実際には(max 2) 4
です。彼らが言うのは、第1 2
がパラメータとしてmax
に適用され、それはパラメータとして4
をとる関数を返します。私が理解していないことは、2をmaxに適用するとどうなりますか? (max 2)
という関数が返されたということはどういう意味ですか?カスケード関数はHaskellでどのように機能しますか?
私の質問をより明確にするために、別の例を挙げましょう。この機能を利用してください:multiply x y x = x*y*z
彼らは実際にはこのように評価されていると言う:((multiply x) y) z
。今私はこの入力を与えます:multiply 2*4*5
これはどのように評価されますか?
multiply 2
戻り(multiply 2)
と4は、パラメータとして適用されます。
(multiply 2) 4
今、この戻り何をするか - ((multiply 2) 4)
やmultiply 8
を?このステップで4と2を乗算すると、Haskellはそれを行う必要があることをどのように知っていますか(関数は3つのパラメータだけを掛けることができるため)
'(multiply 2)4 'を呼び出すと、結果の値は'(2を乗算する)4'、またはより明示的に '\ x - > 2 4 x'を乗算します。この段階では評価できないため、追加の評価は行われません。関数呼び出しが完全に飽和すると(その値が要求されると、Haskellは遅延しているがカレー化に関係なく)、関数が適用されます。 –
"2 * 4 * 5'を乗算すると、" 2 2 4 5'を乗算する "という意味ですか? –
Haskellのレポートでは、 'miltiply'に2つの引数が与えられた場合に何が起こるかは指定されていません。これは2つの議論で非常にうまくいくかもしれませんが、私はそれを実行する(完全なHaskellの)実装についてはわかりません。 – augustss