持っているすべての場所をカウントすると仮定したタプルのリストに map (uncurry compare) $ zip l1 l2
を比較することができあなたのコードに問題があります:
ns:compare [a] [b]
を定義していますが、head
とtail
で使用しているので、a
とb
をリストにします。代わりにcompare a b
を定義してください。
パターンの順序:最初の試合が勝つので、compare [] b = 0
が最初に来るはずです。
compare (tail a tail b)
は、compare
に2つの引数を指定し、tail
には3つの引数を指定しないでください。 compare (tail a) (tail b)
。
すべてが語った:
compare :: [Int] -> [Int] -> Int
compare [] _ = 0
compare a b =
if head a == head b then
1 + compare (tail a) (tail b)
else
compare (tail a) (tail b)
そして、それはおそらく、宿題には適していませんが、あなたが特定の位置であるかどうかを示すブール値のリストを取得することにより、これを書くことができることを知って楽しいかもしれませんが等しい、唯一の真の値にそれらをフィルタリング、そして得られた長さを取得する:
compare a = length . filter id . zipWith (==) a
-- this works too
compare a = sum . fromEnum . zipWith (==) a
あなたはこのワンライナー使用することがあります: – Aleph0