
Elric
Hi,
Disclaimer: I have been learning Haskell for a month and there are still several things about this wonderful language I know nothing of, so please bear with me. Also, I apologize for this (somewhat) long mail./
...
Below are the two versions of the code I came up with to solve this. Neither of them converge to the 'endStates' even after about 15 minutes. So there is definitely something wrong with what I have done. But after banging my head on the keyboard for more then a day with this, I would appreciate some pointers or help.
For one, you don't appear to be removing duplicates from the search set resulting in a blow-up in your search space.
I thought using the ADT was causing the performance issue and reverted to using a plain 3-termed list which holds [Lion count, Wolf Count, Sheep Count] :: [Int]
Your problem here isn't the use of ADTs, it's the use of lists. Why not instead define a forest as follows? data Forest = Forest { wolfs, lions, goats :: !Int } Note how I used a strictness annotation !Int here to ensure that the compiler unboxes these members (at least with GHC >= 7.8), which is almost certainly what you want in this case. Anyways, I took a quick stab at the problem myself. My approach can be found here[1]. Performance isn't great (a bit better than Javascript) but then again the code is pretty much as naive as one could get. I'm sure things could be improved. Cheers, - Ben [1] https://gist.github.com/anonymous/e4a2ccd8df05255d5ed5