これは宿題なので、あまり多くを与えることなく、ここにいくつかのヒントがあります。
リスト内包表記についてまだ知っていますか? この場合、それらは役に立ちます。たとえば、これらをif
式と組み合わせて、次のようにすることができます。
*Main> let starS s = [if c == 's' then '*' else ' ' | c <- s]
*Main> starS "schooners"
"* *"
それらを使用してフィルタリングを行うこともできます。例えば:
*Main> let findFives xs = [x | x <- xs, x == 5]
*Main> findFives [3,7,5,6,3,4,5,7,5,5]
[5,5,5,5]
どちらも完全な答えではありませんが、これらの構造を状況に適応させる方法を理解するのは難しくありません。
ここで実際にガードが必要かどうかも検討する必要があります。たとえば、これはあなたのものと同じスタイルのガードで書かれた関数です:
lensMatch [] [] = True
lensMatch xs ys
| ((length xs) == (length ys)) = True
| otherwise = False
同じことをする関数があります!
lensMatch' xs ys = length xs == length ys
それらが同じであることがわかります。最初のテスト:
*Main> lensMatch [1..4] [1..4]
True
*Main> lensMatch [1..4] [1..5]
False
*Main> lensMatch [] [1..5]
False
*Main> lensMatch [] []
True
そして2番目のテスト:
*Main> lensMatch' [1..4] [1..4]
True
*Main> lensMatch' [1..4] [1..5]
False
*Main> lensMatch' [] [1..5]
False
*Main> lensMatch' [] []
True
最後に、上記の sblom のコメントに強く同意します。zeros [] []
する必要がありますTrue
!次のステートメントについて考えてみましょう:「セット s の各アイテム x について、x > 0」。セット s が空の場合、ステートメントは真です。s には項目がまったくないため、これは true です。これは私には似たような状況のように思えます。