我試圖尋找列表中的元素對,假設它們是列表中唯一的對,並且不超過3個相同的連續元素。haskell - 在列表中找到對
我有一個函數,它接受一個列表,並返回該對中第一個元素的索引(如果有的話)。如果沒有,則返回-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
好像它應該工作。任何想法,爲什麼不是?謝謝
什麼是根本問題?你想達到什麼目的? – AndrewC
避免返回像'-1'這樣的標記值來指示失敗。用'Maybe'代替。 – hammar
@AndrewC不是'只是5'而不是'Maybe 5'? – epsilonhalbe