<div dir="ltr">Hi Cafe,<div style>   I have two programs for the same problem &quot;<span style="color:rgb(0,0,0);font-family:&#39;Helvetica Neue&#39;,Arial,Helvetica,sans-serif;font-size:medium;line-height:17.600000381469727px">Eight queens problem&quot;,</span></div>
<div style>the link is <a href="http://www.haskell.org/haskellwiki/99_questions/90_to_94">http://www.haskell.org/haskellwiki/99_questions/90_to_94</a>.</div><div style>   My two grograms only has little difference, but the performance, this is my solution:</div>
<div style><br></div><div style>-- solution 1------------------------------------------------------------</div><div style><div>queens1 :: Int -&gt; [[Int]]                                                                                                       </div>
<div>queens1 n = map reverse $ queens&#39; n                                                                                             </div><div>    where queens&#39; 0       = [[]]                                                                                                </div>
<div>          queens&#39; k       = [q:qs | q &lt;- [1..n], qs &lt;- queens&#39; (k-1), isSafe q qs]                                              </div><div>          isSafe   try qs = not (try `elem` qs || sameDiag try qs)                                                              </div>
<div>          sameDiag try qs = any (ë(colDist, q) -&gt; abs (try - q) == colDist) $ zip [1..] qs </div><div><br></div><div style>-- solution 2--------------------------------------------------------------</div><div style>
<div>queens2 :: Int -&gt; [[Int]]                                                                                                       </div><div>queens2 n = map reverse $ queens&#39; n                                                                                             </div>
<div>    where queens&#39; 0       = [[]]                                                                                                </div><div>          queens&#39; k       = [q:qs | qs &lt;- queens&#39; (k-1), q &lt;- [1..n], isSafe q qs]                                              </div>
<div>          isSafe   try qs = not (try `elem` qs || sameDiag try qs)                                                              </div><div>          sameDiag try qs = any (ë(colDist,q) -&gt; abs (try - q) == colDist) $ zip [1..] qs </div>
<div><br></div><div style>the performance difference is: (set :set +s in ghci)</div><div style><div>*Main&gt; length (queens1 8)</div><div>92</div><div>(287.85 secs, 66177031160 bytes)</div><div>*Main&gt; length (queens2 8)</div>
<div>92</div><div>(0.07 secs, 17047968 bytes)</div><div>*Main&gt; </div><div><br></div><div style>The only different in the two program is in the first is &quot;q &lt;- [1..n], qs &lt;- queens&#39; (k-1),&quot; and the second is &quot;qs &lt;- queens&#39; (k-1), q &lt;- [1..n]&quot;.</div>
<div style><br></div><div style>Does sequence in list comprehansion matter? And why?</div></div></div></div></div>