数独を解く on 7つの言語7つの世界
ここで、テキストに記載されているfd_domainって組み込みの述語が、
SWI-Prologには存在しないので、GNU Prologに切り替え。
| ?- listing. sudoku(A, B) :- B = A. (16 ms) yes | ?- sudoku([1,2,3,4], Sol). Sol = [1,2,3,4] yes | ?-
| ?- listing. sudoku(A, B) :- B = A, A = [_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _], fd_domain(A, 1, 4). yes | ?- sudoku([1,2,3], Sol). no | ?- sudoku([1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4], Sol). Sol = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4] (15 ms) yes | ?-
| ?- listing. sudoku(A, B) :- B = A, A = [C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R], fd_domain(B, 1, 4), S = [C, D, E, F], T = [G, H, I, J], U = [K, L, M, N], V = [O, P, Q, R], W = [C, G, K, O], X = [D, H, L, P], Y = [E, I, M, Q], Z = [F, J, N, R], A1 = [C, D, G, H], B1 = [E, F, I, J], C1 = [K, L, O, P], D1 = [M, N, Q, R], valid([S, T, U, V, W, X, Y, Z, A1, B1, C1, D1]). valid([]). valid([A|B]) :- fd_all_different(A), valid(B). (32 ms) yes | ?-
| ?- sudoku([_, _, 2, 3, _, _, _, _, _, _, _, _, 3, 4, _, _], Sol). Sol = [4,1,2,3,2,3,4,1,1,2,3,4,3,4,1,2] yes | ?-