7つの言語7つの世界 – Prolog Day 3

Prologの三日目。だいぶん慣れてきた。

・6×6および9×9 も解けるように改良

サンプルのプログラムに単にルールを追加して、 ラッパーの関数を作るだけ。 9×9は同じ事なので省略(著者は計算量を軽くする工夫をして欲しかった?)

sudoku(Puzzle, Solution) :-
		sudoku4(Puzzle, Solution).
sudoku(Puzzle, Solution) :-
		sudoku6(Puzzle, Solution).
sudoku4(Puzzle, Solution) :- #omit
sudoku6(Puzzle, Solution) :- #omit

・解を見やすく出力するように改良 末尾でprintするようにした

print(Row1), nl,
print(Row2), nl,
print(Row3), nl,
print(Row4), nl,
print(Row5), nl,
print(Row6), nl.

・クイーンのリストを引数として受け取るようにして,8 クイーン問題を解け. ただし,各クイーンは,タプルではなく,1~8 の整数で表し、クイーンの行はリスト内の位置として、クイーンの列はリスト内の値として取り出す 結局の所、タプルを与える順番は順不同なので、こんなラッパーを作った。

eight_queens_parameter([A, B, C, D, E, F, G, H]) :-
    eight_queens([(1, A), (2, B), (3, C), (4, D), (5, E), (6, F), (7, G), (8, H)]),
	print([(1, A), (2, B), (3, C), (4, D), (5, E), (6, F), (7, G), (8, H)]).

github

Written on December 10, 2011