Estimados, tengo una duda en esta pregunta:
Dada la siguiente definición:
foo x = fst . foldr fun (Nothing,0) where fun _ (Just x,i) = (Just x,i) fun y (Nothing,i) | x == y = (Just i,i+1) | otherwise = (Nothing,i+1)No entiendo por qué el resultado de evaluar foo 3 [1,2,4,5,3,3] da (Just 0).
Cuando corro el código a mano, empiezo con el foldr desde el último elemento de la lista, o sea que el primer pliegue es:
fun 3 (Nothing, 0), lo que devuelve (Just 0, 1).
Luego el segundo pliegue es:
fun 3 (Just 0, 1), y este patrón no está contemplado en el pattern matching de fun, porque entiendo que en el patrón
fun _ (Just x, i), el valor de x es el mismo valor con que se llamó a foo (o sea, que es 3).
Alguien me puede explicar?