5

こんにちは、私は Haskell を初めて使用します。許可されていない座標系 (CS1) のリスト (つまり、座標のリストのリスト) とすべての座標 (CL) のリストを入力できるコードを作成しようとしています。この関数の目的は、CL 内のこれらの座標を少なくとも 1 つ含む CS1 内のすべての座標系を破棄し、最終的に CS1 からの座標系 (CS2) のサブセットを小さくすることです。(紛らわしい?ごめんなさい)

私はナッツをクラックするのにかなり近いと思います(トレイルエラーの段階にあるので本当にわかりませんが)、listelem2を実行するとlistelemに文句を言う非網羅的な問題があります。誰かが私が欠けているものを見ることができますか? あなたが与えることができるどんな助けにも感謝します! :D

listelem0 :: (Eq a) => [a] -> a -> [a]
listelem0 [] y = []
listelem0 (x:xs) y 
            | x == y = []
            | x /= y = [x] ++ listelem0 xs y

listelem :: (Eq a) => [a] -> a -> [a]
listelem (x:xs) y
      | length (listelem0 (x:xs) y) < length (x:xs) = []
      | otherwise = listelem0 (x:xs) y

listelem1 :: (Eq a) => [[a]] -> a -> [[a]]
listelem1 [] y = []
listelem1 (x:xs) y = [listelem x y] ++ listelem1 xs y  

listelem2 :: (Eq a) => [[a]] -> [a] -> [[a]]
listelem2 [] [] = [[]]
listelem2 (x:xs) [] = (x:xs)
listelem2 (x:xs) (y:ys) = listelem2 (listelem1 (x:xs) y) ys
4

2 に答える 2

13

Emil の言う通り、あなたにはこれら 2 つのパターンが欠けていますが、これらの欠けているパターンを自分で見つける方法は次のとおりです。

ghci -Wall yourFile.hs(または)を実行するghci -fwarn-incomplete-patterns yourFile.hsと、すべての不完全なパターンが表示されます。

[1 of 1] Compiling Main             ( /tmp/ls.hs, interpreted )

/tmp/ls.hs:2:1:
    Warning: Pattern match(es) are non-exhaustive
             In an equation for `listelem0': Patterns not matched: (_ : _) _

/tmp/ls.hs:8:1:
    Warning: Pattern match(es) are non-exhaustive
             In an equation for `listelem': Patterns not matched: [] _

/tmp/ls.hs:17:1:
    Warning: Pattern match(es) are non-exhaustive
             In an equation for `listelem2': Patterns not matched: [] (_ : _)
Ok, modules loaded: Main.

最後の例を見てみましょう: In an equation for listelem2': Patterns not matched: [] (_ : _)-- これは、まさにそのように聞こえることを意味します: パターンlistelem2 [] (something:somethingElse)は決して一致しません。

于 2013-10-27T20:57:15.273 に答える