It’s pretty straightforward to make a Sudoku solver in Prolog especially when applying CLP (Constraint Logic Programming).

Here is how to use my program:

1 |
:- solve_sudoku. |

Then you can enter the known numbers one by one.

1 2 3 |
+-+-+-+-+-+-+ |9 8| 5 | 7| |72 |1 |

When complete, the program determines and prints the solution.

1 2 3 4 5 6 7 8 9 10 11 12 13 |
+-+-+-+-+-+-+ |938|254|617| |726|193|854| |514|876|329| +-+-+-+-+-+-+ |692|387|145| |187|465|293| |453|921|768| +-+-+-+-+-+-+ |345|712|986| |871|649|532| |269|538|471| +-+-+-+-+-+-+ |

Typing

1 |
:- sudoku(L), write_sol(L). |

Gives

1 2 3 4 5 6 7 8 9 10 11 12 13 |
+-+-+-+-+-+-+ |123|456|789| |456|789|123| |789|123|456| +-+-+-+-+-+-+ |214|365|897| |365|897|214| |897|214|365| +-+-+-+-+-+-+ |531|642|978| |642|978|531| |978|531|642| +-+-+-+-+-+-+ |

By pressing ; over and over again, you could enumerate all 6,670,903,752,021,072,936,960 possible Sudoku solution grids, but this might take a while..

It shouldn’t be too hard to extend this program to actually create new puzzles. If anyone does, let me know.

The prolog environment I used here is SWI-Prolog.