quindi ho bisogno di fare una funzione descritta comeHaskell- Trova elemento in una lista e restituisce la sua posizione di
invFib :: Integer -> Maybe Integer
che prende un intero e lo cerca nella sequenza di Fibonacci (come descritto dalla funzione di seguito)
fibs :: [Integer]
fibs = 0:1:(zipWith (+) fibs (tail fibs))
e restituisce l'indice del numero di esempio:
invFib 0
~>Just 0
invFib 1
~>Just 1
o Just 2
map invFib [54, 55, 56]
~>[Nothing,Just 10,Nothing]
invFib (fibs !! 99)
~>Just 99
Ho provato a fare una funzione che prende una lista di interi e sputa fuori l'indice, ma mantiene in mancanza . qualche idea?
questo è funzione i tried-
findNum :: [Integer] -> Integer -> Integer -> Integer
findNum x:xs y z = if x == y
then z
else findNum xs y (z+1)
Edit: la funzione si blocca su numeri non nella sequenza di Fibonacci, anche mostra solo 1 valore quando si immette 1
invFib :: Integer -> Maybe Integer
invFib n = if n < 0
then Nothing
else fmap fromIntegral (elemIndex n fibs)
Dovresti pubblicare il codice che hai provato se vuoi una spiegazione del problema. – Pubby
'findNum' sembra un buon inizio. Devi pormi questa domanda: dato che 'fibs' è una lista infinita, come stabiliresti che, per esempio,' 54' non è in quella lista? – MtnViewMark