List 用SWI-Prolog解决逻辑问题

List 用SWI-Prolog解决逻辑问题,list,prolog,logic,clpfd,List,Prolog,Logic,Clpfd,我正在做一个名为“逻辑点”的逻辑游戏。游戏是一个3*3的网格,每行和每列周围都有数字。规则很简单,每行和每列的总和应该等于这些数字。下面是我的代码,它是从clpfd sokoku更改而来的。但结果是出了问题 代码: 结果: ?- problem([1,0,0,1,0,0], Rows), kakuro(Rows), maplist(writeln, Rows). [_G670,_G673,_G676] [_G682,_G685,_G688] [_G694,_G697,_G700] Rows =

我正在做一个名为“逻辑点”的逻辑游戏。游戏是一个3*3的网格,每行和每列周围都有数字。规则很简单,每行和每列的总和应该等于这些数字。下面是我的代码,它是从clpfd sokoku更改而来的。但结果是出了问题

代码:

结果:

?- problem([1,0,0,1,0,0], Rows), kakuro(Rows), maplist(writeln, Rows).
[_G670,_G673,_G676]
[_G682,_G685,_G688]
[_G694,_G697,_G700]
Rows = [[_G4520, _G4523, _G4526], [_G4532, _G4535, _G4538], [_G4544, _G4547, _G4550]],
_G4520 in 0..1,
_G4520+_G4532+_G4544#=1,
_G4520+_G4523+_G4526#=1,
_G4532 in 0..1,
_G4532+_G4535+_G4538#=1,
_G4535 in 0..1,
_G4523+_G4535+_G4547#=1,
_G4523 in 0..1,
_G4526 in 0..1,
_G4526+_G4538+_G4550#=1,
_G4538 in 0..1,
_G4550 in 0..1,
_G4544+_G4547+_G4550#=1,
_G4544 in 0..1,
_G4547 in 0..1.
但是当我用
[[[u0,0]、[0,0]、[0,0,0]、[0,0,0]]]
替换我的拼图时,结果是正确的:

?- problem([1,0,0,1,0,0], Rows), kakuro(Rows), maplist(writeln, Rows).
[1,0,0]
[0,1,0]
[0,0,1]
Rows = [[1, 0, 0], [0, 1, 0], [0, 0, 1]].
但我需要网格是未知的(符号“389;”)。错在哪里

我将
kakuro/1
中最后一行的行=[A,B,C]更改为
label(Vs)
。它可以工作,但只有一个结果显示:

[0,0,1]
[0,1,0]
[1,0,0]
应该有另一个:

[1,0,0]
[0,1,0]
[0,0,1]

这里有什么问题吗?

不必担心问题函数的第一个参数:)。用标签(Vs)替换行[A,B,C]作为谓词kakuro/1的最后一行,并在提示下尝试kakuro(行)。它可以工作。但是只有一个结果,我的谜题应该有两个结果,为什么不显示它们呢?如果在第一个结果之后的提示下按空格键而不是Enter键,您将得到所有答案solution@user3889372嗨,你还有prolog程序吗?你能给我发一份.pl文件的副本吗cguo@upei.ca. 谢谢
[1,0,0]
[0,1,0]
[0,0,1]