1

数独(X,棋盘):-

Board=X,

Board =
[A1,A2,A3,A4,A5,A6,A7,A8,A9,
     B1,B2,B3,B4,B5,B6,B7,B8,B9,
     C1,C2,C3,C4,C5,C6,C7,C8,C9,
     D1,D2,D3,D4,D5,D6,D7,D8,D9,
     E1,E2,E3,E4,E5,E6,E7,E8,E9,
     F1,F2,F3,F4,F5,F6,F7,F8,F9,
     G1,G2,G3,G4,G5,G6,G7,G8,G9,
     H1,H2,H3,H4,H5,H6,H7,H8,H9,
     I1,I2,I3,I4,I5,I6,I7,I8,I9],

    %rows on the board
permutation([A1,A2,A3,A4,A5,A6,A7,A8,A9],[1,2,3,4,5,6,7,8,9]),
permutation([B1,B2,B3,B4,B5,B6,B7,B8,B9],[1,2,3,4,5,6,7,8,9]),
permutation([C1,C2,C3,C4,C5,C6,C7,C8,C9],[1,2,3,4,5,6,7,8,9]),
permutation([D1,D2,D3,D4,D5,D6,D7,D8,D9],[1,2,3,4,5,6,7,8,9]),
permutation([E1,E2,E3,E4,E5,E6,E7,E8,E9],[1,2,3,4,5,6,7,8,9]),
permutation([F1,F2,F3,F4,F5,F6,F7,F8,F9],[1,2,3,4,5,6,7,8,9]),
permutation([G1,G2,G3,G4,G5,G6,G7,G8,G9],[1,2,3,4,5,6,7,8,9]),
permutation([H1,H2,H3,H4,H5,H6,H7,H8,H9],[1,2,3,4,5,6,7,8,9]),
permutation([I1,I2,I3,I4,I5,I6,I7,I8,I9],[1,2,3,4,5,6,7,8,9]),

%columns on the board
permutation([A1,B1,C1,D1,E1,F1,G1,H1,I1],[1,2,3,4,5,6,7,8,9]),
permutation([A2,B2,C2,D2,E2,F2,G2,H2,I2],[1,2,3,4,5,6,7,8,9]),
permutation([A3,B3,C3,D3,E3,F3,G3,H3,I3],[1,2,3,4,5,6,7,8,9]),
permutation([A4,B4,C4,D4,E4,F4,G4,H4,I4],[1,2,3,4,5,6,7,8,9]),
permutation([A5,B5,C5,D5,E5,F5,G5,H5,I5],[1,2,3,4,5,6,7,8,9]),
permutation([A6,B6,C6,D6,E6,F6,G6,H6,I6],[1,2,3,4,5,6,7,8,9]),
permutation([A7,B7,C7,D7,E7,F7,G7,H7,I7],[1,2,3,4,5,6,7,8,9]),
permutation([A8,B8,C8,D8,E8,F8,G8,H8,I8],[1,2,3,4,5,6,7,8,9]),
permutation([A9,B9,C9,D9,E9,F9,G9,H9,I9],[1,2,3,4,5,6,7,8,9]),

    %each individual box will be a permutation of 9 different numbers
permutation([A1,A2,A3,B1,B2,B3,C1,C2,C3],[1,2,3,4,5,6,7,8,9]),
permutation([A4,A5,A6,B4,B5,B6,C4,C5,C6],[1,2,3,4,5,6,7,8,9]),
permutation([A7,A8,A9,B7,B8,B9,C7,C8,C9],[1,2,3,4,5,6,7,8,9]),
permutation([D1,D2,D3,E1,E2,E3,F1,F2,F3],[1,2,3,4,5,6,7,8,9]),
permutation([D4,D5,D6,E4,E5,E6,F4,F5,F6],[1,2,3,4,5,6,7,8,9]),
permutation([D7,D8,D9,E7,E8,E9,F7,F8,F9],[1,2,3,4,5,6,7,8,9]),
permutation([G1,G2,G3,H1,H2,H3,I1,I2,I3],[1,2,3,4,5,6,7,8,9]),
permutation([G4,G5,G6,H4,H5,H6,I4,I5,I6],[1,2,3,4,5,6,7,8,9]),
permutation([G7,G8,G9,H7,H8,H9,I7,I8,I9],[1,2,3,4,5,6,7,8,9]).

以上是solve/2 5 ?-solve(X,Y)。错误:顶层:未定义的过程:solve/2(DWIM 无法更正目标)

当我尝试使用 2 个正常变量时发生这种情况

2 ?- 求解(X,[ ,7,2,4, ,_, , ,1, ,8, ,7, , ,3,2, ,6,3,1, ,_, ,7, ,_, , ,_,5,2, , ,1,4, , ,5,9, ,4,6, ,_,8,4, , ,3,7, , ,_, , ,9, , ,_, 2,5,3, ,6,8, ,_,5, ,7, ,2, , ,_, ,9,4,6, ])。错误:顶层:未定义的过程:solve/2(DWIM 无法更正目标)

当我输入的第二个变量是一个带有一些固定数字的列表时,也会发生同样的情况

老实说,我不知道自己做错了什么,当没有任何效果时,尝试思考可能的答案真的很令人沮丧 有人可以告诉我我做错了什么吗?

4

2 回答 2

3

你可能是说

solve(X,Board):-
  Board = X,
  Board =
    [A1,A2,A3,A4,A5,A6,A7,A8,A9,
     B1,B2,B3,B4,B5,B6,B7,B8,B9,
     C1,C2,C3,C4,C5,C6,C7,C8,C9,
     D1,D2,D3,D4,D5,D6,D7,D8,D9,
     ...

但我认为你的代码会太慢而无法工作......

于 2013-05-06T06:09:06.317 回答
2

错误表示solve/2未定义。

solve/2我在您提供的代码中看不到定义。这就是你拥有的所有代码吗?

solve/2不是一个特殊的或内置的谓词,如果你调用它,你必须定义它。

于 2013-05-06T02:38:43.963 回答