Sto risolvendo alcuni problemi di Project Euler in Haskell. Ho scritto un programma per un indovinello e non ha funzionato come mi aspettavo.Perdita di spazio nel programma di elenco
Quando ho controllato il task manager durante l'esecuzione del programma, ho visto che stava usando> 1 gigabyte di RAM su ghc. Un mio amico ha scritto un programma con lo stesso significato in Java ed è riuscito in 7 secondi.
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
So che questo programma sarebbe uscita il numero che voglio dato abbastanza RAM e il tempo, ma ci deve essere un modo migliore prestazioni.
Ah, non sapevo che la sequenza fosse trapelata, grazie Simon. –
Grazie, questo era esattamente quello di cui avevo bisogno. L'unica cosa che mi chiedo ancora è perché la perdita di spazio è ancora lì quando eseguo opl in ghci, e non è lì quando lo compilo su un eseguibile e lo avvio da lì. – Ingdas
Come trovo questo attraverso la profilazione? Ho passato un po 'di tempo a profilare con '-hy' per scoprire che' [] 'stava usando la maggior parte dello spazio; ma come avrei potuto scoprire che la sequenza era il problema? – solidsnack