これは宿題なので、完全な答えではなく、ヒントまたは学習できる場所へのリンクのみを希望します。これは私に与えられたものです:
allEqual :: Eq a => a -> a -> a -> Bool
これから理解できることは、3つの値(この場合はa
、a
、a
?)を比較して、それらがすべて等しいかどうかを返すことになっているということです。 。これは私が試したものです:
allEqual :: Eq a => a -> a -> a -> Bool
allEqual x y z do
Bool check <- x == y
Bool nextC <- y == z
if check == nextC
then True
else False
私は正直に言ってHaskellで完全に道に迷ってしまったので、関数の読み方や宣言方法に関するヒントがあれば非常に役立ちます。
allEqual :: Eq a => a -> a -> a -> Bool
シグネチャは次のとおりです。allEqual
は、a
型の3つの値を消費します。タイプBool
の結果を生成します。 Eq a =>
部分は、a
が持つことができる可能な操作を制限します。これは、a
の型が何であれ、Eq
で定義された要件を満たす必要があることを示しています。これらの要件はここにあります: http://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#t:Eq これで、a
が実行できる操作がわかったので、型シグネチャに従って関数を完成させることができます。
方法は次のとおりです。
allEqual :: Eq a => a -> a -> a -> Bool
allEqual x y z = x == y && y == z
最初の行は、関数の型シグネチャを定義しています。
人間の言葉で言えば、次のようになります。
どのタイプの
allEqual
にもa
という関数があります。これはEq a
*のインスタンスを必要とし、すべてa
タイプの3つのパラメーターを取り、Bool
を返します
2行目は言う:
関数
allEqual
は、パラメータx
、y
、およびz
に対して、x == y && y == z
を評価する必要があります。これは、x
はy
と等しく、y
はz
と等しい。
*インスタンスまたは型クラスは、他の多くのプログラミング言語にはない言語機能であるため、それらの意味がわかりにくい場合は、まずそれらについて学ぶことをお勧めします。