リスト内の要素のペアがリスト内の唯一のペアであり、同一の連続する要素が3つ以下であると想定して、リスト内の要素のペアを検索しようとしています。
リストを取り込んで、ペアの最初の要素がある場合はそのインデックスを返す関数があります。そうでない場合は、-1を返します
searchForPairs xs = searchHelp xs ((genericLength xs) - 1)
where searchHelp xs n
| searchHelp xs 0 = -1 -- no pairs found
| (xs !! n) == (xs !! (n - 1)) = n
| otherwise = searchHelp xs n-1
何らかの理由で、次のエラーが返されます。
Couldn't match expected type `Bool' with actual type `Int'
In the expression: n
In an equation for `searchHelp':
searchHelp xs n
| searchHelp xs 0 = - 1
| (xs !! n) == (xs !! (n - 1)) = n
| otherwise = searchHelp xs n - 1
In an equation for `searchForPairs':
searchForPairs xs
= searchHelp xs ((genericLength xs) - 1)
where
searchHelp xs n
| searchHelp xs 0 = - 1
| (xs !! n) == (xs !! (n - 1)) = n
| otherwise = searchHelp xs n - 1
うまくいくようです。なぜそうではないのか、何か考えはありますか?