这个prolog输出试图说什么?

时间:2015-11-08 00:42:22

标签: prolog

多年前在大学时,我修改了一些序言,但这已经被遗忘了,所以我再次算作一个完整的初学者(羞辱!)

无论如何,我正在玩一些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

我在期待......好吧,坦率地说,我有一半期待完全失败:)但我认为只有数字可以显示在此输出中。它试图用那些#tagged的东西告诉我什么,以及看起来像范围的parens中的东西?它是否试图说有很多可能的解决方案并且它一下子告诉我所有(似乎不太可能,因为它是非常无益的)或者这是某种错误状态(在这种情况下,为什么它会编译我的代码然后说“是“这个查询?”

感激地收到任何见解!

1 个答案:

答案 0 :(得分:4)

我认为这是一组限制因素不足以确定没有搜索的解决方案的结果。例如,_#3(2..3)可能意味着名为_#3的变量可以采用范围2..3中的值。您可以尝试标记变量,例如

..., labeling([], Solution).

语法细节当然取决于你的求解器......