HOFは、その引数が上がらないのでplusc
、私は希望ではない個人コールほかの略でどのように理解していません機能しません。明らかHOFを発見する方法はが最も左側ではないことを、署名中括弧を探すことです:
{- equivalent signature -}
plusc :: Num a => a -> a -> a
我々は、オプションの括弧を削除すると、それは機能がHOFではないことは明らかですそれは機能を取りますが、それはカレーです。
注:すべてのカレー機能するので関数を返し、しかし、我々は、部分的にそれを適用した後、それは関数を返す、とのような機能で動作することを言うかもしれないことができます - それはHOFです。これは概念を記述/学習するのに特に役立つ方法ではないと私は考えていますが、その定義がパラメータと結果の両方に及ぶと思います。
単にグループその引数うuncurriedバージョン:
plusUnc :: Num a => (a, a) -> a
今すぐHOFはこのような機能を取り、いくつかの他のものにそれを回すかもしれない:
imu :: Num a => (a -> a -> a) -> (a -> a -> a)
imu f = \a b -> f a b
注意ラムダインプラントは明らかに簡略化できました。私は単に説明のためにそれを綴りました。
f
は、imu
に渡される「下位」関数であることに注意してください。これを使用するには:
imuPlus = imu plusc -- a function is being passed
imuPlus 1 2 -- == 3
注:我々は両方の概念をミキシングしている(とあなたが両方を求めた)以来、imu
もカレーれます。 uncurriedバージョンは、次のようになります。
imuUnc :: ((a -> a -> a), (a, a)) -> a
今では(それはパラメータの機能を持っている)HOFであるが、それは上記の例とは異なり機能を、返しません。 しかし、それがカレー化されているときに使用するほうがずっと簡単ですが、主に部分的なアプリケーションのためです。
私はあなたが何を求めているのか、何を理解していないのかは分かりません。 – Bergi
私はこの機能がどのように追加を意味するのか分かりません。関数の定義*は、どの程度まで加算を定義しますか? –
加算は '+'演算子によって定義され、 'plusc'が使用します。おそらく 'plusc xy = x + y'や' plusc = \ x - > \ y-> x + y'( 'x + y' ='(+ )xy') – Bergi