więc muszę zrobić to funkcja opisana jakoHaskell- Znajdź element listy i zwraca jego pozycję
invFib :: Integer -> Maybe Integer
który odbywa liczbą całkowitą i patrzy na nią w ciągu Fibonacciego (jak opisane przez funkcję poniżej)
fibs :: [Integer]
fibs = 0:1:(zipWith (+) fibs (tail fibs))
i zwraca indeks przykład numer:
invFib 0
~>Just 0
invFib 1
~>Just 1
lub Just 2
map invFib [54, 55, 56]
~>[Nothing,Just 10,Nothing]
invFib (fibs !! 99)
~>Just 99
Próbowałem czyniąc funkcję, która pobiera listę liczb całkowitych i wypluwa indeksu, ale utrzymuje braku . jakieś pomysły?
to funkcja i wypróbowaną
findNum :: [Integer] -> Integer -> Integer -> Integer
findNum x:xs y z = if x == y
then z
else findNum xs y (z+1)
Edit: funkcja nie zamarza na numery w sekwencji Fibonacciego, także pokazuje tylko wartość 1, gdy 1 jest wpisany
invFib :: Integer -> Maybe Integer
invFib n = if n < 0
then Nothing
else fmap fromIntegral (elemIndex n fibs)
Powinieneś opublikować kod, który wypróbowałeś, jeśli chcesz mu wyjaśnić problem. – Pubby
'findNum' wygląda na dobry początek. Musisz zadać sobie to pytanie: biorąc pod uwagę, że 'fibs' jest nieskończoną listą, jak byś określił, że, powiedzmy,' 54' nie znajduje się na tej liście? – MtnViewMark