<span style="font-family: courier new,monospace;">plong 0 = Var 0<br>plong n | even n&nbsp;&nbsp;&nbsp; = Or&nbsp; (Var n) (plong (n-1))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 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&nbsp;&nbsp;&nbsp; 0m3.290s</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">user&nbsp;&nbsp;&nbsp; 0m3.152s</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">sys&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;&nbsp; 0m3.732s<br>
user&nbsp;&nbsp;&nbsp; 0m3.680s<br>sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.024s<br><br>--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;&nbsp; 0m4.164s<br>user&nbsp;&nbsp;&nbsp; 0m4.128s<br>sys&nbsp;&nbsp;&nbsp;&nbsp; 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> &lt;<a href="mailto:ajb@spamcop.net">ajb@spamcop.net</a>&gt; 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&#39;day all.<br> <br><br> Quoting Cetin Sert &lt;<a href="mailto:cetin.sert@gmail.com">cetin.sert@gmail.com</a>&gt;:<br> <br> &gt; -- proposition<br> &gt; data Prp a = Var a<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Not (Prp a)<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Or&nbsp;&nbsp;(Prp a) (Prp a)<br>
 &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| And (Prp a) (Prp a)<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Imp (Prp a) (Prp a)<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Xor (Prp a) (Prp a)<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Eqv (Prp a) (Prp a)<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Cns Bool<br> &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deriving (Show, Eq)<br>
 <br> <br>This is probably the fastest:<br> <br> vars :: Prp a -&gt; [a]<br> vars p = vars&#39; p []<br>&nbsp;&nbsp; where<br>&nbsp;&nbsp;&nbsp;&nbsp; vars&#39; (Var a) = (a:)<br> <br>&nbsp;&nbsp;&nbsp;&nbsp; vars&#39; (Not p) = vars&#39; p<br> <br>&nbsp;&nbsp;&nbsp;&nbsp; vars&#39; (Or l r) = vars&#39; l . vars&#39; r<br>
&nbsp;&nbsp;&nbsp;&nbsp; {- etc -}<br>&nbsp;&nbsp;&nbsp;&nbsp; vars&#39; (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>