Hi,<br><br>I recommend you read John Hughe&#39;s article &quot;Why Functional
Programming Matters&quot;[1]. As one of his examples he implements
alpha-beta-pruning. I&#39;m not really a Haskell expert, but I think the
main difference will be in the kind of data structures you use to
implement the algorithms. Many people have recommended Chris Okasaki&#39;s
PhD thesis [2] to me for an in-depth treatment of the topic.<br>
<br>[1]: <a href="http://www.cs.chalmers.se/%7Erjmh/Papers/whyfp.html" target="_blank">http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html</a><br>[2]: <a href="http://www.cs.cmu.edu/%7Erwh/theses/okasaki.pdf" target="_blank">http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf</a><br>

<br>Best regards,<br><font color="#888888">Marc</font><br><br><br><div class="gmail_quote">On Fri, Feb 19, 2010 at 9:07 PM, Mikhail Novikov <span dir="ltr">&lt;<a href="mailto:freiksenet@gmail.com">freiksenet@gmail.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;">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
Hello!<br>
<br>
Four days ago I decided to try to learn Haskell by participating in Google AI Challenge (<a href="http://csclub.uwaterloo.ca/contest/" target="_blank">http://csclub.uwaterloo.ca/contest/</a>). I went with LYAH and Real-World Haskell and I had no problems with functional core of Haskell, as I have lispy background. The problems begun when I tried to move my code to use different kind of decision algorithms, like negascout or flood fill.<br>

<br>
I have found a ready made solution for negascout (<a href="http://hackage.haskell.org/packages/archive/game-tree/0.1.0.0/doc/html/src/Data-Tree-Game_tree-Negascout.html" target="_blank">http://hackage.haskell.org/packages/archive/game-tree/0.1.0.0/doc/html/src/Data-Tree-Game_tree-Negascout.html</a>), but I was quite shocked by it&#39;s complexity, especially considering the relative easy of imperative algorithm.(<a href="http://en.wikipedia.org/wiki/Negascout" target="_blank">http://en.wikipedia.org/wiki/Negascout</a>). IMHO it is just TOO extremely complex and hard to read :/<br>

<br>
In flood fill situation is similar - I need to track all the colored squares among 4 lines of recursion and I couldn&#39;t find a reasonable way to do it without going to infinite recursion or having lots of duplicates.<br>

<br>
So basically, I wonder if there is some generic way to transfer imperative algorithms with local state to functional style without making them overly complex.<br>
<br>
Thanks a lot, Mikhail<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.10 (GNU/Linux)<br>
Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org/" target="_blank">http://enigmail.mozdev.org/</a><br>
<br>
iEYEARECAAYFAkt+73cACgkQPHyh4sfuKrl7NgCeKHrIdJbHrSse6z7eRrmAi6ck<br>
yYoAoIRJZLq6RVUcCG2Zf5Xc5tRW5YBk<br>
=oUX7<br>
-----END PGP SIGNATURE-----<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br>