此函数的目标是验证列表X仅包含0或1。
我们被告知要使用ins来声明列表的域名。
我们有一个名为verifyLines
的谓词,其中H
是约束列表,X
表示一行。约束验证了可以相互跟随的1的数量。例如,如果H
包含数字3,则X
必须在列表中的某个位置包含1,1,1
。问题不在于验证这些约束,因为我们已经创建了一个名为valid_seq
的谓词,它为我们做了。我们的问题是我们必须验证X
列表中只有0或1。这是一个正确的方法吗?当我以这种方式使用它时,我似乎得到了操作员丢失的错误。
verifylines(H, X) :-
X ins 0..1,
valid_seq(H, X).
编辑: SWI-Prolog中的错误 ĀERROR:x:/bureau/tp2_projet2.pl:4:2:语法错误:预期的操作员
第4行是X ins 0..1,
我在当前use_module(library(clpfd)).
之上添加了verifylines()
,但它似乎没有影响错误消息...不确定我做错了什么,我也不熟悉其用法prolog中的图书馆。
答案 0 :(得分:1)
如果您只想说:"列表X中的所有元素都是0或1"你只需说X ins 0..1
。
?- use_module(library(clpfd)).
true.
?- X = [A,B,C], X ins 0..1.
X = [A, B, C],
A in 0..1,
B in 0..1,
C in 0..1.
也许你忘了use_module(library(clpfd))
?因为当我不知道的时候,我得到了:
?- X = [A,B,C], X ins 0..1.
ERROR: Syntax error: Operator expected
ERROR: X = [A,B,C], X
ERROR: ** here **
ERROR: ins 0..1 .
但实际上你应该更好地描述你的问题和示例程序并显示你的错误是什么样的以及所有能够在不猜测的情况下重现问题的东西,因为猜测更难,对吧?
你是否看到我只把我需要的内容显示错误,没有程序和代码的其他部分,只是解释器交互,我复制粘贴一切,以便你可以在你的计算机上尝试相同的,如果你得到同样的错误,至少你知道你可以在我看来时重现问题,如果你不能,那就变得更加困难,但通常情况下,如果你展示一切都不那么困难。同样在您的问题的代码中,您已经包含了对谓词的调用,但是您没有包含该定义,因此没有人可以运行您已经显示的程序,因为他们没有定义。