Prolog:具有多个值的变量

时间:2014-12-08 08:33:05

标签: recursion prolog

我正在尝试实现一个程序,该程序接受具有多个值的变量并评估所有值。例如:

foo(X,R) :-
  X > 2,
  Z is R + 1,
  R = Z.

这个程序可能无效,但无论如何都会帮我提问。

我的问题:如果X有多个值,我如何为每个值X > 2增加计数器?

1 个答案:

答案 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 + 1R的所有实例化对于有限?- 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}}