[Haskell-cafe] Code Review: Sudoku solver

Tom Schrijvers Tom.Schrijvers at cs.kuleuven.ac.be
Thu Apr 6 14:49:42 EDT 2006


On Thu, 6 Apr 2006, Claus Reinke wrote:

>> Curry does not have a constraint solver of its own. It simply delegates all 
>> constraints to the FD solver of SICStus Prolog. 
>
> or that of SWI Prolog (which prompted my attempt to install Curry).
>
> which was implemented by..    hi, again!-)  (*)

The SWI-Prolog FD library is just a prototype implementation... looking 
for someone to replace it with a state-of-the-art implementation.

>> The all_different constraint subsumes the rules that you describe, 
>> depending on the consistency algorithm used. FD solvers implement general 
>> but efficient algorithms that are much more complex than a few simple 
>> rules.
>
> I haven't yet been able to get Curry to work on my windows machine,
> but it seems to do a straightforward translation of these constraints to 
> Prolog > +FD solver, close to the one I've attached (an easy way to "use" external
> constraint solvers from Haskell;-).
:)

> the docs you pointed to state that all_different, in declarative view, simply 
> translates into mutual inequalities between the list members, and although I 
> don't fully understand the sources, they seem to confirm that not much more 
> is going on.

The SWI-Prolog prototype library does nothing more than the declarative 
meaning, that's why it's a prototype.

State-of-the-art all_different implementations are a lot more complicated 
(often based on graph algorithms) to do very strong propagation.

Here is a paper about solving Sudoku with constraint (logic )
programming comparing a number of all_different algorithms and additional 
tricks:
http://www.computational-logic.org/iccl/master/lectures/winter05/fcp/fcp/sudoku.pdf

Cheers,

Tom

--
Tom Schrijvers

Department of Computer Science
K.U. Leuven
Celestijnenlaan 200A
B-3001 Heverlee
Belgium

tel: +32 16 327544
e-mail: tom.schrijvers at cs.kuleuven.be


More information about the Haskell-Cafe mailing list