0votos

Raices N de numeros M en Haskell

por josejuan hace 4 años

No se usan ni restas ni negaciones, sólo sumas.

Sacar las posibles raizes de un numero

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Data.Maybe 
 
raiz :: Int -> Maybe Int 
raiz n = listToMaybe $ filter (esRaiz n) [1..n] 
         where esRaiz n m = sum (take m $ repeat m) == n  
 
main = do 
 
    print $ raiz (8 * 8) 
    print $ raiz (9 * 8) 
 
{- 
    Resultado: 
        Just 8 
        Nothing 
-} 
7 comentarios
0votos

Escrito por Sayd hace 4 años

Nuca he utilizado lenguajes funcionales, pero según tu punto de vista crees que este problema entre en la categoría de de difícil?
1votos

Escrito por josejuan hace 4 años

Yo creo que, se mire por donde se mire, es fácil; cualquiera con unos rudimentos de programación debería poder resolverlo.
0votos

Escrito por Sayd hace 4 años

podrías responderme un a pregunta...
¿Por que utilizas Haskell? o que ventajas tiene sobre otros lenguajes?, por que estoy interesado en aprenderlo.
0votos

Escrito por josejuan hace 4 años

"¿Por que utilizas Haskell?"

Es difícil explicarlo y que se entienda pero un lenguaje que sea (a la vez): conciso, diferente al resto, cercano a la formalidad matemática, usable en la práctica, implique el uso de estrategias diferentes a otros paradigmas "típicos", etc... no se encuentra todos los días ¡y Haskell se aproxima mucho! :)

"que ventajas tiene sobre otros lenguajes?"

Ésta es todavía más difícil de responder. Si buscas algo práctico, que te sirva "para el día a día" e incluso encontrar trabajo, entonces, NO uses Haskell. En ese sentido no tiene ventajas (y sí unos cuantos inconvenientes serios). Pero tiene unas cuantas cosas que a mí me gustan (el sistema de tipos supongo que lo resumiría, pero muy burdamente).

Yo de primeras sólo lo recomendaría por diversión :)
0votos

Escrito por Sayd hace 4 años

Muchas gracias por tu respuesta, lo tomaré en cuenta :)
0votos

Escrito por drabor hace 4 años

Una pequeña observación, puedes cambiar
take m $ repeat m

por
replicate m m
0votos

Escrito por josejuan hace 4 años

Tienes razón, me dio pereza eliminar y volver a meter la solución :D

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.