No se puede imprimir resultado

No se puede imprimir resultado

de Manolo Alberto Petrillo Soria -
Número de respuestas: 4
Buenos días, en una llamada recursiva a una función del teórico me tira error porque no está definido el "show" o una instancia del mismo para ella: fact :: Integer -> Integer -> Integer fact n = factacc 1 n where factacc a 0 = abs factacc a n = factacc(a*n)(n-1) Cómo podría resolverlo?. Gracias. Saludos
En respuesta a Manolo Alberto Petrillo Soria

Re: No se puede imprimir resultado

de Alberto Pardo -
Hola,

El problema que tenés es que el tipo que le pusiste a fact no es correcto. El tipo es Integer ->Integer y no Integer -> Integer -> Integer. Raro que te diga ese error (de que no tiene show), por en este caso el error es que el tipo no se corresponde con el tipo que deduce de la definición de fact.

Couldn't match expected type `Integer -> Integer'
with actual type `Integer'

Quien tiene tipo Integer -> Integer -> Integer es factacc.

Saludos,
Alberto.
En respuesta a Alberto Pardo

Re: No se puede imprimir resultado

de Manolo Alberto Petrillo Soria -
Buenas, gracias por la respuesta, pero sigue tirando error aún cambiándole el tipo a fact:
clase3.hs:56:10: error:
* Couldn't match expected type `Integer'
with actual type `a0 -> a0'
* Probable cause: `factacc' is applied to too few arguments
In the expression: factacc 1 n
In an equation for `fact':
fact n
= factacc 1 n
where
factacc a 0 = abs
factacc a n = factacc (a * n) (n - 1)
|
56 | fact n = factacc 1 n
En respuesta a Manolo Alberto Petrillo Soria

Re: No se puede imprimir resultado

de Alberto Pardo -
No me había dado cuenta que en el caso base factacc estás devolviendo abs. Tiene que devolver a (el acumulador).

Te da ese error de tipo porque abs es un método de la clase Num de tipo Num a => a -> a. Justo coincidió que devolvés un nombre que existe en el contexto y por eso no te da que no sabe quien es ese identificador.  

Saludos,
Alberto.