まず、最初に String を受け取り、次に Int を取るタプルである Type StudentMark を作成しました。
type StudentMark = (String, Int)
これは私の capMarks 関数です:
capMarks :: [StudentMark] -> [StudentMark]
capMarks [cMarks] = [(st, mk) | (st, mk) <- [capMark cMarks]]
そして、ここに私の capMark 関数があります:
capMark :: StudentMark -> StudentMark
capMark (st, mk)
| mk > 39 = (st, 40)
| mk < 40 = (st, mk)
返されるはずです:
[("Jo", 37), ("Sam", 40)]
から:
capMarks [("Jo", 37), ("Sam", 76)]
ただし、関数にパラメーターを 1 つだけ入力した場合は、正しい期待される応答のみが返されます。次に例を示します。
capMarks [("Jake", 50)]
または
capMarks [("Jake"), 30]
しかし、想定どおりに 2 つ (またはそれ以上) を使用すると、capMarks 関数に非網羅的なパターンがあることがわかります。