我正在尝试实现一个程序,该程序接受具有多个值的变量并评估所有值。例如:
foo(X,R) :-
X > 2,
Z is R + 1,
R = Z.
这个程序可能无效,但无论如何都会帮我提问。
我的问题:如果X
有多个值,我如何为每个值X > 2
增加计数器?
答案 0 :(得分:1)
为了将X
实例化为越来越大的整数,您可以使用以下内容:
?- between(0, inf, X).
X = 0 ;
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
<ETC.>
PS1:请注意,您必须实例化R
,因为它在算术表达式Z is R + 1
中使用。
PS2:请注意,自X
R
以来,R =\= R + 1
和R
的所有实例化对于有限?- between(0, inf, X), foo(X, 1).
,您的程序都失败了。例如,意味着以下查询不会终止:
:- use_module(library(clpfd)).
foo(X,R):-
X #> 2,
Z #= R + 1,
R #= Z.
或者,程序可以在库CLP(FD)中重写(由Markus Triska创建):
{{1}}