Estoy aprendiendo Haskell así que me puse a resolver algunos problemas de Project Euler que ya había resuelto en Lua y la verdad que Haskell es un lenguaje muy interesante.
El problema en particular es el 20, nos dice que obtengamos la suma de los dígitos de 100!.
El código en Haskell que resuelve el problema es el siguiente:
factorial 0 = 1
factorial n = n * factorial(n-1)
sum (map digitToInt(show (factorial 100)))
A ver, explico un poco el código. Las dos primeras líneas definen el factorial, me parece que no podría ser más intuitivo!. Primero definimos el factorial de 0 como 1, y seguido el factorial de n como n por el factorial de (n-1).
La parte donde se realiza la suma de los dígitos es un poco más rebuscada, veamos que hice (desde dentro hacia afuera).
·factorial 100 es totalmente intuitivo, obtenemos el factorial de 100 según nuestra definición anterior.
·show convierte el número obtenido (el factorial) en un string.
·digitToInt es una función que convierte un caracter (’0′..’9′) a un entero, pero como nosotros tenemos un string usamos map para ejecutar la función a cada elemento del string y obtener una lista a partir de esos elementos.
·sum simplemente suma todos los elementos de la lista.
Y listo! Ya tenemos el resultado, qué lindo no?