有人在这个网站上问了一个问题,我注意到如果我们有一个包含变量的列表列表,那么这些变量在外部列表中是完全可见的。例如
[[D,O,N,A,L,D], [G,E,R,A,L,D], [R,O,B,E,R,T]]
有关详细信息,请参阅here
现在问题是为什么存在D1 = D2
的约束。
提出这个问题的人也注意到它不会产生所有可能的解决方案,因为当其中一个变量被实例化时,其他列表中的另一个(同名)变量也会被实例化,这限制了解决方案的数量。
我试图找到是否有任何方法可以在不更改查询的情况下生成所有可能的解决方案,但我认为这是不可能的,因为内部仿函数中的每个变量在外部仿函数中也是可见的。
所以我的问题是,无论如何都要在不改变查询的情况下生成所有解决方案吗?
答案 0 :(得分:1)
如果同一个表达式中的变量的所有实例具有相同的值排除了任何解决方案,那么不需要更改查询以找到这些解决方案。变量的这种行为对Prolog来说非常重要。