0

2 つのリストを使用する関数を作成しようとしています。何らかの理由で、私が合格したとき:

isPermutation [] []、または [] [1,2,3] または [1,2,3] [] - 関数 isPermutation で非網羅的なパターンを取得します

isPermutation :: (Eq a)=>[a]->[a]->Bool
**isPermutaiton** [] [] = True
**isPermutaiton** [] ys = False
**isPermutation** xs [] = False
isPermutation (x:xs) (ys) = True

すべてのケースをカバーしているため、なぜこれが発生するのかわかりません。

更新 * Chris Taylor に感謝します: - 単純なタイプミスでした。「isPermutation」ではなく「isPermutaiton」という関数名のスペルを間違えていました *

Haskell は、同じ関数を意味していること (duh) や、2 つの異なる関数を大文字と小文字を組み合わせて「宣言」していることを認識しないため、スペルに注意してください。

4

1 に答える 1

2

isPermutaitonの代わりに、2 行目と 3 行目にタイプミスがありますisPermutation

あなたは効果的に定義しました

foo [] [] = True       -- both arguments empty
foo [] ys = False      -- first argument empty, second argument anything

bar  xs    [] = False  -- second argument empty, first argument anything
bar (x:xs) ys = True   -- first argument at least one element, second anything

そのため、空でない最初の引数で(ie foo)isPermutaitonを呼び出すとエラーが発生し、空の最初の引数と空でない 2 番目の引数で (ie ) を呼び出すとエラーが発生します。barisPermutation

于 2013-10-07T16:30:41.847 に答える