<span style="font-family: courier new,monospace;">plong 0 = Var 0<br>plong n | even n = Or (Var n) (plong (n-1))<br> | otherwise = And (Var n) (plong (n-1)) <br><br style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">main = do print ((length ∘ vars) (plong 10000000))<br>
</span>real 0m3.290s</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">user 0m3.152s</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">sys 0m0.020s</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">main = do print ((length ∘ vars_) (plong 10000000))<br>real 0m3.732s<br>
user 0m3.680s<br>sys 0m0.024s<br><br>-- vrsn=varsBromage<br></span></span><span style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">main = do print ((length ∘ vrsn) (plong 10000000))<br>
real 0m4.164s<br>user 0m4.128s<br>sys 0m0.008s<br></span></span><br><span style="font-family: courier new,monospace;">ghc -fglasgow-exts -O2<br>ghc 6.8.2<br style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">@Andrew:<br><span style="font-family: courier new,monospace;">It is astonishing to see that your version actually performs the worst (at least on my machine). By looking at your code I had also thought that yours would be the fastest in terms of runtime performance, it was also exactly what I tried but failed to get to here on my own.</span> Maybe future ghc versions will change this in favour of your version.<br>
<br>I would like to have someone test it on another machine though:<br><br></span><div style="margin-left: 40px;"><span style="font-family: courier new,monospace;">fetch: svn co <a href="https://okitsune.svn.sourceforge.net/svnroot/okitsune">https://okitsune.svn.sourceforge.net/svnroot/okitsune</a> .</span><br>
<span style="font-family: courier new,monospace;">build: ghc -fglasgow-exts -O2 Common.hs Propositions.hs Test.hs</span><br><span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">testS: time ./a.out sert</span><br>
<span style="font-family: courier new,monospace;">
</span><span style="font-family: courier new,monospace;">testH: time ./a.out hutton</span><br><span style="font-family: courier new,monospace;">testB: time ./a.out bromage</span><br><span style="font-family: courier new,monospace;"></span></div>
<span style="font-family: courier new,monospace;"><br>Best regards,<br>Cetin Sert.</span><br><br><div><span class="gmail_quote">On 21/02/2008, <b class="gmail_sendername"><a href="mailto:ajb@spamcop.net">ajb@spamcop.net</a></b> <<a href="mailto:ajb@spamcop.net">ajb@spamcop.net</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
G'day all.<br> <br><br> Quoting Cetin Sert <<a href="mailto:cetin.sert@gmail.com">cetin.sert@gmail.com</a>>:<br> <br> > -- proposition<br> > data Prp a = Var a<br> > | Not (Prp a)<br> > | Or (Prp a) (Prp a)<br>
> | And (Prp a) (Prp a)<br> > | Imp (Prp a) (Prp a)<br> > | Xor (Prp a) (Prp a)<br> > | Eqv (Prp a) (Prp a)<br> > | Cns Bool<br> > deriving (Show, Eq)<br>
<br> <br>This is probably the fastest:<br> <br> vars :: Prp a -> [a]<br> vars p = vars' p []<br> where<br> vars' (Var a) = (a:)<br> <br> vars' (Not p) = vars' p<br> <br> vars' (Or l r) = vars' l . vars' r<br>
{- etc -}<br> vars' (Cns _) = id<br> <br> Cheers,<br> Andrew Bromage<br> <br>_______________________________________________<br> Haskell-Cafe mailing list<br> <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br> </blockquote></div><br>