晚上好,我有一个简单的问题,我警告你我对 prolog 很陌生。假设有三个相同大小的列表,每个列表只包含 1、0 或 -1。我想验证对于所有 i,在三个列表的第 i 个元素中,只有一个是非零的。
此代码为固定 i 执行此操作:
:- use_module(library(clpfd)).
compat1(V1,V2,V3,I) :-
length(V1,G),
nth1(I,V1,X),
nth1(I,V2,Y),
nth1(I,V3,Z),
W is X*X+Y*Y+Z*Z,
W is 1,
I in 1..G.
我怎么知道“对于所有我,compat1(V1,V2,V3,I)”?我试图定义
compat2(V1,V2,V3,1) :- compat1(V1,V2,V3,1).
compat2(V1,V2,V3,K) :- compat2(V1,V2,V3,J), compat1(V1,V2,V3,K), K is J+1.
这样我就可以用我感兴趣的 K=maximum 值来调用它。但是 compat2 不起作用:在 ";" 之后给出 true,然后 无限期地运行。
谢谢!