Prolog 这个序言输出想说什么?

Prolog 这个序言输出想说什么?,prolog,Prolog,几年前在大学里,我修改了一些序言,但那早已被遗忘,所以我再次算作一个完整的开端(谦卑!) 不管怎样,我在玩布鲁斯·泰特的一些代码,想出了一个我认为是完整(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),_#2

几年前在大学里,我修改了一些序言,但那早已被遗忘,所以我再次算作一个完整的开端(谦卑!)

不管怎样,我在玩布鲁斯·泰特的一些代码,想出了一个我认为是完整(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
我期待着。。。嗯,坦率地说,我有一半的预期是完全失败的:)但我认为只有数字才能显示在这个输出中。那些带有#标记的东西和类似于范围的东西想告诉我什么?它是在试图说有很多可能的解决方案,并且一次告诉我所有的问题(看起来不太可能,因为如果是这样的话,这是非常没有帮助的),还是这是某种错误状态(在这种情况下,它为什么编译我的代码并对这个查询说“是”)


感谢您的任何见解

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

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

语法细节取决于您的解算器,当然……

您使用的是GNU Prolog。是的,GNU Prolog 1.3.0。有什么意义是我遗漏的吗;其他系统,如SICStus或SWI,向您展示这些答案,以便您可以将它们粘贴回。嗯,我很担心这可能会朝着我还没有准备好的方向发展:)也就是说,我想我理解您的评论大体上同意我的想法,这告诉我一系列答案是可能的?同时,更多可能有用的信息1)我正在使用gnu prolog 1.3.0,2)您的语法通常会导致“no“3”(即使用与我期望的方式相同的更简单的查询)搜索似乎会导致多个输出,我可以在第一个输出出现后按分号选择“next one”(下一个),或者我可以键入字母“a”并将其全部获取。@TobyEggitt阅读了GNU Prolog手册中讨论有限域的部分。谢谢大家,手册页面更多的是参考而不是描述性的,但我的推断足以让我认为我看到了发生的事。它似乎试图告诉我,对于这些细胞来说,可能不连续的范围是合理的。实际上,我提出的特定问题有不止一个解决方案。因此,似乎有什么东西触发了这种行为(而不是更熟悉的“这里有一个可能”然后用分号或a“给我看另一个”。也许这是因为我在代码中有一个fd_域(…)。而且,当试图在没有fd的情况下手动编写代码时,它就是不起作用。THX