にintまたは整数の合計を取得します。この関数がintと整数のリストの両方のリストのために働く必要がありハスケル
答えて
タイプクォーターは、型(文字通りタイプのグループです)に関する一般的な方法を提供します。あなたはこのように、明示的な型Integer
するのではなく、型クラス制約を使用することができます。
myFunc :: Integral a => [a] -> String
myFunc x = if (even (sum x)) then "even" else "odd"
これはそれがa
は型変数である[a]
からString
の機能だし、いずれかのように制約されているように指定されたでしょうそれがIntegral
typeclassのメンバーである限り、タイプします。これを言うもう1つの方法は、Integral
型の場合のインスタンスがである限り、どのタイプでもあります。つまり、その特定の型に対して指定された型クラスのメソッドがあることを意味します。
Integral
typeclassは、値が整数(つまり積分)の型のためのものです。
幸いなことに、Int
とInteger
のインスタンスはIntegral
に提供されていますので、それを使用できます。
Int型と整数型は異なる型です。しかし、それらはどちらもIntegral型クラスのインスタンスですが、関数の1つとして 'mod'があります。
あなたの関数が特定の型以外のもので動作するようにするには、[Integer] - [Char]または[Int] - [ Char]の場合、型はそれらのうちの1つよりも制限が少ないはずです。それは[a] - > [Char]でなければなりません。しかし、あなたがそのインスタンスを宣言した場合、それは2つの理由のためにコンパイルされません:
1)合計はxの数値のリストを必要とします。すなわち、
sum :: Num a => [a] -> a;
民は、とりわけ、民to include a definition for (+)のインスタンスである任意の種類を必要とする別の型クラスです。これにより合計で加算を使用してすべての数値を加算することができます。
2)modは、xの合計がIntegralのインスタンスである必要があります。だから、
mod (sum x) :: Integral a => a -> a
技術的にもタイプが合計はXでなければならないため、のNumのインスタンスですが、definition of Integralも順番になるためにそれを必要と実のインスタンスであることを積分の任意のインスタンスを必要とすることが必須ですタイプNumの - 基本的にあなたは、インスタンスNumberがフリーのタイプである必要があります。
だから、最後に、あなたは最初のタイプは、(実際にそれのための用語を知らない)タイプ「変数」であることができるようにする必要がありますが、必要とされる1は、インテグラル型である:
myFunc :: Integral a => [a] -> [Char]
myFunc x = if (sum x `mod` 2 ==1) then "odd" else "even"
また、型宣言(myFunc :: Integral a => [a] - > [Char])を含めないと、コンパイラはこれをすべて仮定して空白を自動的に埋めます君は。型宣言は、関数の型を明確にするか、関数の適用可能性を制限するか、何らかの理由で型を推論できないときに変数の型をコンパイラに明確にするために使用されます。しかし、あなたがしたくない場合は、通常、型を宣言する必要はありません。
ありがとう、それは動作します。 –
'Integral'は型ではなく、typeclassです。これはここでかなり重要なことです。 –
@ReinHenrichsはい、私の間違いは、それを修正しました。 –
- 1. 関数の宣言と実装の両方に初期化リストを書く必要がありますか?
- 2. Pythonの関数とリストはどこにある必要がありますか?
- 3. 整数のリストをチェックするためのHaskellのカスタム整列化関数
- 4. Excel - リストを複写するための関数が必要です(複合式)
- 5. リストのすべての要素を整数にする必要があります
- 6. VBA:次のように関数と呼び出しサブを両方書く必要があります
- 7. python:整数と浮動小数点の両方のリストに整数だけを出力する方法
- 8. 偶数の整数リストを作成するためのScheme関数
- 9. 変数の出力をリスト形式に整形するのに役立つ必要があります。
- 10. "クラステンプレートの使用にはテンプレート引数リストが必要"と複数のクラスがあります
- 11. ハスケルにあるリストのリストを含む
- 12. エラー:セッションIDのリストが-sの後に続く必要があります-s
- 13. Groovy intと整数関数の解決
- 14. ハスケルの整数の桁数
- 15. gfortranエラー:(1)の関数定義の仮引数リストが必要です
- 16. Tリストには複数の値を指定する必要があります
- 17. ハスケル:リストの印刷要素
- 18. 数字リストによるリストのリストへの整数リストの並べ替え
- 19. パッケージ本体のグローバル変数が複数のユーザのために働く方法
- 20. 整数kとnがリスト内にあればTrueを返す関数?
- 21. 関係の両辺に同じ列数が必要です
- 22. F#int - > intリスト再帰関数
- 23. リターンを使わずに整数の元のリストが変更された関数を書くには?
- 24. ハスケルのリストの正方形
- 25. htmlとxmlの両方を含める必要がありますか?
- 26. ハスケル関数のかっこ
- 27. すべての整数リストを出力のために浮動小数点数に変換する関数
- 28. リストに与えられた関数がリストにない最小のnatを返す関数をCoqに書く方法はありますか?
- 29. 関数の戻り値は、intまたはintのリストのいずれかを返します。変数
- 30. HTML5入力検証パターン - アルファベットと数字の両方を含める必要がありますか?
ありがとうございます。 –