4

Haskell は初めてで、リストを受け取って bool を返す関数を書こうとしています。

True入力リストが'a'only で構成されるリストである場合は返され、Falseそうでない場合は返されます。

これは私の最善の推測です:

f :: [a] -> Bool

f ('a':[]) = True

f (x:xs) = False

これはコンパイルに失敗し、次を返します。

Couldn't match type `a' with `Char'
  `a' is a rigid type variable bound by
      the type signature for f :: [a] -> Bool at charf.hs:6:1
In the pattern: 'b'
In the pattern: 'b' : []
In an equation for `f': f ('b' : []) = True

私のロジックのエラーは何ですか?

4

3 に答える 3

1

リストに特定の値が 1 つ含まれているかどうかをテストする関数を作成する場合は、いくつかの変更を加える必要があります。

まず、比較する期待値を提供する必要があります。現時点では、「a」と比較しようとしていますが、 aを不明なタイプCharと比較することはできません。次に、この型はクラスのインスタンスである必要があるため、比較を行うことができます。CharaEq

シングルトンリストに対してパターンマッチを行い、要素を期待する要素と比較する句を追加できます。

isSingletonOf :: Eq a => a -> [a] -> Bool
isSingletonOf v [s] | v == s = True
isSingletonOf _ _ = False

次に、比較する関数を作成できます[Char]

f :: [Char] -> Bool
f = isSingletonOf 'a'
于 2013-08-10T18:42:34.163 に答える