<div dir="ltr">factors :: Int -&gt; [Int]<br>factors x = [z | z &lt;- [1..(x `div` 2)], x `mod` z == 0]<br><br>is_perfect :: Int -&gt; Bool<br>is_perfect x = sum(factors x) == x <br>&nbsp;<br>do_perfect :: [Int] -&gt; [Int]<br>
do_perfect x = [z |z &lt;- x, is_perfect z ]<br><br>main = print $ do_perfect [1..9000]<br>-- compile with ghc -O2, it&#39;s more than ten times faster for me<br>-- althought using 1..(x `div 2) instead of 1..x-1 is a bit of cheating ;-))<br>
<br><br><br><div class="gmail_quote">On Thu, Oct 2, 2008 at 6:45 AM, Matthew Williams <span dir="ltr">&lt;<a href="mailto:Matthew_Williams@xyratex.com">Matthew_Williams@xyratex.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">




<div>
<div><span><font size="2" face="Arial">Hi 
Guys,</font></span></div>
<div><span><font size="2" face="Arial"></font></span>&nbsp;</div>
<div><span><font size="2" face="Arial">I&#39;m new to Haskell 
and I was wondering if you can help me:</font></span></div>
<div><span><font size="2" face="Arial"></font></span>&nbsp;</div>
<div><span><font size="2" face="Arial">One of the first 
program&#39;s I tend to write when I&#39;m looking at a new language is a program to 
generate a list of perfect numbers:</font></span></div>
<div><span><font size="2" face="Arial"></font></span>&nbsp;</div>
<div><span><font size="2" face="Arial">--My First Perfect 
Number Generator<br>factors :: Integer -&gt; [Integer]<br>factors x = [z | z 
&lt;- [1..x-1], x `mod` z == 0]</font></span></div>
<div>&nbsp;</div>
<div><span><font size="2" face="Arial">is_perfect :: 
Integer -&gt; Bool<br>is_perfect x = if sum(factors x) == x then True&nbsp;else 
False</font></span></div>
<div>&nbsp;</div>
<div><span><font size="2" face="Arial">do_perfect :: 
[Integer] -&gt; [Integer]<br>do_perfect x = [z |z &lt;- x, is_perfect z 
]</font></span></div>
<div><span><font size="2" face="Arial"></font></span>&nbsp;</div>
<div><span><font size="2" face="Arial">Then to run 
it:</font></span></div>
<div><span><font size="2" face="Arial">&gt; do_perfect 
[1..9000]</font></span></div>
<div><span><font size="2" face="Arial"></font></span>&nbsp;</div>
<div><font size="2" face="Arial"><span>I&#39;m using GHC to run 
it. My problem&nbsp;/ question is this: It&#39;s running quite a lot slower than 
equivalent programs in erlang and python. I suspect it&#39;s down to the way I&#39;ve 
written it. Any thoughts (or comments in general)</span></font></div>
<div><font size="2" face="Arial"><span></span></font>&nbsp;</div>
<div><font size="2" face="Arial"><span>Many 
thanks</span></font></div>
<div><font size="2" face="Arial"><span></span></font>&nbsp;</div>
<div><font size="2" face="Arial"><span>Matt</span></font></div>
</div></blockquote></div><br></div>