Tema

[Error loco] Problema con un promedio

4 respuestas 6604 visitas

Estaba haciendo un ejercicio de un parcial, donde habia q hacer un promedio, nada loco. El problema aparecio cuando quize probar la funcion de promedio fuera del entorno del parcial, algo asi:

prom::[Int]->Float
prom x = ((sumar x)/(length x))

sumar::[Int]->Int
sumar []     = 0
sumar (x:xs) = x+(sumar xs)

(la especificacion requeria length x > 0)

Toma una lista de ints, las suma y las divide por la longitud devolviendo un Float, muy simple pero no funca, me tira este error:

  • Type error in explicitly typed binding
    *** Term : prom
    *** Type : [Int] -> Int
    *** Does not match : [Int] -> Float

Como lo arreglo??? Estas cosas en los parciales jamas te las podes imaginar....

Proba poner (length x)::Float

Firma

Quimey

No, no me funco.. definitivamente el interpretador no me quiere. Grande Quimey siempre ayudando! estudiaste algo de la carrera de compu o solo sabes haskell porq si ?

Me convencieron de que estaba bueno haskell y aprendi algo.
Igual siempre me gustó programar, mi lenguaje por default es c++

Nico, acabo de probarlo y el problema es, como te dije en clase, el tipo de datos que devuelve length.
El operador / no está definido para Int, entonces necesitás hacer una conversión a float del largo para pedir la división
Esto anda:

prom :: [Int] -> Float
prom x = (fromInt (sumar x))/(fromInt (length x))

sumar :: [Int] -> Int
sumar []     = 0
sumar (x:xs) = x+(sumar xs)

(voy a tener q modificar la fuente del código xq es horrible)
Edit: Fuente modificada 🙂

Firma

"If debugging is the process of removing bugs, then programming must be the process of putting them in." -- Dijkstra