Ich löse gerade einige Probleme des Projekts Euler in Haskell. Ich habe ein Programm für ein Rätsel darin geschrieben und es hat nicht so funktioniert, wie ich es erwartet hatte.
Als ich bei der Ausführung des Programms in den Task-Manager schaute, sah ich, dass es mehr als 1 Gigabyte RAM auf dem Ghc verbrauchte. Ein Freund von mir schrieb ein Programm mit der gleichen Bedeutung in Java und schaffte es in 7 Sekunden.
import Data.List
opl = find vw $ map (\x-> fromDigits (x++[0,0,9]) )
$ sequence [[1],re,[2],re,[3],re,[4],re,[5],re,[6],re,[7],re,[8],re]
vw x = hh^2 == x
where hh = (round.sqrt.fromIntegral) x
re = [0..9]
fromDigits x = foldl1 (\n m->10*n+m) x
Ich weiß, dass dieses Programm die gewünschte Zahl ausgeben würde, wenn es genügend Arbeitsspeicher und Zeit hätte, aber es muss doch einen besseren Weg geben.