这个 prolog 输出试图表达什么?
What is this prolog output trying to say?
几年前在大学里,我修补了一些序言,但那早已被遗忘,所以我又算作一个完整的初学者(谦虚!)
无论如何,我在玩 Bruce Tate 的一些代码,并想出了我认为是完整 (9x9) 游戏的数独解算器。但是,当我 运行 它时,它会产生一些非常奇怪的输出:
Solution = [_#3(2..3),_#24(2:7),_#45(2..3:5:7),_#66(2..3:8),_#87(2..3:5..6:8),4,_#121(2:5..6),1,9,6,8,_#194(2..5:7:9),_#215(1..3:9),_#236(2..3:5:9),_#257(1..2:5:9),_#278(2:4..5),_#299(4:7),_#320(5:7),_#341(1..2),_#362(2:4),_#383(2:4..5:9),_#404(1..2:9),_#425(2:5..6:9),7,3,_#472(4:6),8,4,1,_#532(2:8),_#553(2:8),7,3,9,5,6,7,5,_#689(6:8),_#710(4:8..9),_#731(4:6:8..9),_#752(6:8..9),1,2,3,_#828(2..3),9,_#862(2..3:6),5,1,_#909(2:6),7,8,4,8,_#990(2:4:7),1,6,_#1037(2..5:9),_#1058(2:5:9),_#1079(4..5),_#1100(3..4:7),_#1121(5:7),5,_#1163(4:6..7),_#1184(4:6..7),_#1205(1:3..4:8),_#1226(3..4:8),_#1247(1:8),_#1268(4:6:8),9,2,9,3,_#1341(2:4:6),7,_#1375(2:4..5:8),_#1396(1..2:5:8),_#1417(4..6:8),_#1438(4:6),_#1459(1:5)]
yes
我原以为……好吧,坦率地说,我有一半希望完全失败 :) 但我认为此输出中只能显示数字。它试图通过那些带有 # 标记的东西以及括号中看起来像范围的东西来告诉我什么?它是想说有很多可能的解决方案并且它一次告诉我所有(似乎不太可能,因为如果它是非常无益)或者这是某种错误状态(在这种情况下,为什么它编译我的代码并说 "yes" 这个查询?)
非常感谢收到任何见解!
我认为这是一组约束不够强大的结果,无法在不搜索的情况下确定解决方案。例如,_#3(2..3)
可能意味着名为 _#3
的变量可以采用 2..3
范围内的值。您可以尝试 标记 变量,例如
..., labeling([], Solution).
语法细节当然取决于您的求解器...
几年前在大学里,我修补了一些序言,但那早已被遗忘,所以我又算作一个完整的初学者(谦虚!)
无论如何,我在玩 Bruce Tate 的一些代码,并想出了我认为是完整 (9x9) 游戏的数独解算器。但是,当我 运行 它时,它会产生一些非常奇怪的输出:
Solution = [_#3(2..3),_#24(2:7),_#45(2..3:5:7),_#66(2..3:8),_#87(2..3:5..6:8),4,_#121(2:5..6),1,9,6,8,_#194(2..5:7:9),_#215(1..3:9),_#236(2..3:5:9),_#257(1..2:5:9),_#278(2:4..5),_#299(4:7),_#320(5:7),_#341(1..2),_#362(2:4),_#383(2:4..5:9),_#404(1..2:9),_#425(2:5..6:9),7,3,_#472(4:6),8,4,1,_#532(2:8),_#553(2:8),7,3,9,5,6,7,5,_#689(6:8),_#710(4:8..9),_#731(4:6:8..9),_#752(6:8..9),1,2,3,_#828(2..3),9,_#862(2..3:6),5,1,_#909(2:6),7,8,4,8,_#990(2:4:7),1,6,_#1037(2..5:9),_#1058(2:5:9),_#1079(4..5),_#1100(3..4:7),_#1121(5:7),5,_#1163(4:6..7),_#1184(4:6..7),_#1205(1:3..4:8),_#1226(3..4:8),_#1247(1:8),_#1268(4:6:8),9,2,9,3,_#1341(2:4:6),7,_#1375(2:4..5:8),_#1396(1..2:5:8),_#1417(4..6:8),_#1438(4:6),_#1459(1:5)]
yes
我原以为……好吧,坦率地说,我有一半希望完全失败 :) 但我认为此输出中只能显示数字。它试图通过那些带有 # 标记的东西以及括号中看起来像范围的东西来告诉我什么?它是想说有很多可能的解决方案并且它一次告诉我所有(似乎不太可能,因为如果它是非常无益)或者这是某种错误状态(在这种情况下,为什么它编译我的代码并说 "yes" 这个查询?)
非常感谢收到任何见解!
我认为这是一组约束不够强大的结果,无法在不搜索的情况下确定解决方案。例如,_#3(2..3)
可能意味着名为 _#3
的变量可以采用 2..3
范围内的值。您可以尝试 标记 变量,例如
..., labeling([], Solution).
语法细节当然取决于您的求解器...