3

elem関数を再帰的に実装しようとしています。これは私が書いたものです:

 member :: Eq a => a -> [a] -> Bool
 member _ [] = False

 member n (x:xs)
     | n == x           = True : member (n xs)
     | otherwise        = False

 main = do
 print (member 10 [1,12,11])

'期待されるタイプ'Bool'と実際のタイプ'[a0]'のエラーが一致しませんでした。

if..else..thenも使用して同じことを試みましたが、無駄でした。

ここでは、Haskellの非常に基本的で基本的な概念を見逃していると思います。

ヘルプ?

これこれは私を助けませんでした。

4

2 に答える 2

10

節がの宣言された戻り値の型True : member (n xs)と一致しません。in withが見つかった場合は、単純に return を返します。memberBoolxxsx == nTrue

memberそれ以外の場合は、より小さなリストで再帰する必要がありますxs(つまり、次の要素と等しいかどうかを再度確認しnます)。説明したようにこれら 2 つの問題を修正したコードを次に示します。

member n (x:xs) | n == x    = True
                | otherwise = member n xs
于 2012-10-13T23:18:33.073 に答える
4
  • 要素が見つかった場合、答えはTrueです。そこにリストを作成しようとしているようですが、理由はわかりません...
  • 見つからない場合は、再帰して末尾を確認してください...
于 2012-10-13T23:15:33.513 に答える