하스켈에서 Project Euler의 일부 문제를 해결하고 있습니다. 나는 그것에 수수께끼를위한 프로그램을 썼다. 그리고 그것은 내가 예상했던 것처럼 작동하지 않았다.목록 프로그램의 공간 누설
프로그램을 실행할 때 작업 관리자를 살펴보면 ghc에서> 1 기가 바이트의 RAM을 사용하고있는 것으로 나타났습니다. 내 친구가 자바에서 같은 의미의 프로그램을 작성하고 7 초 만에 성공했습니다.
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
는이 프로그램이 출력 내가 충분히 RAM와 시간을 부여 할 번호를 것이라고 알고 있지만, 더 나은 성능의 방법이 있어야한다.
아, 시퀀스가 유출 된 것을 몰랐습니다. Simon에게 감사드립니다. –
고마워, 이것이 내가 필요로했던 것이었다. ghci에서 opl을 실행할 때 공간 누수가 여전히 존재하는 이유는 내가 궁금해하는 유일한 것입니다. 실행 파일로 컴파일하고 거기에서 실행하면 거기에없는 것입니다. – Ingdas
프로파일 링을 통해 어떻게 찾을 수 있습니까? 나는'-hy'를 사용하여''''이 대부분의 공간을 사용하고 있음을 알기 위해 시간을 보냈다. 그러나'sequence '가 문제라는 것을 어떻게 알았겠습니까? – solidsnack