Programación Funcional - cuboimpar en Haskell

 
Vista:
sin imagen de perfil

cuboimpar en Haskell

Publicado por Alejandro Caro (2 intervenciones) el 04/03/2013 15:09:25
La pregunta es:

Definir una función cuboimpar de tipo Int->Int que dado un entero no negativo x, devuelve la
suma de los cubos de los números impares entre 0 y x.
Ejemplo: cuboimpar 5 = 1^3 + 3^3 + 5^3 = 1 + 27 + 125  = 153

Y respondo con esto:

cubo :: Int -> Int
cubo 0 = 0
cubo 1 = 1
cubo a = a^3

cuboimpar :: Integer -> Integer
cuboimpar 0 = 0
cuboimpar a = if mod a 2 /= 0 then (a^3) + cubo (a-1) else cubo (a-1) else cubo (a-1)

Y me tira error con el else, ¿dóde está el error?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

cuboimpar en Haskell

Publicado por Alejandro Caro (autorespuesta) (2 intervenciones) el 19/05/2013 16:53:47
Hay varios errores.

1ero "else" no puede aparecer dos veces en una misma sentencia

2do Si viene declarándose Int -> Int se tiene que seguir declarando Int -> Int
sino va a tirar error

3ero cuboimpar es una sentencia recursiva, se define a si misma para calcular el siguente número
por lo tanto definir una función "cubo" es innecesario

El código corregido quedaría así

cuboimpar :: Integer -> Integer
cuboimpar 0 = 0
cuboimpar a = if mod a 2 /= 0 then a^3 + cuboimpar(a-1) else cuboimpar(a-1)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar