我应该如何在prolog中设计这个谓词?

时间:2015-05-09 17:05:55

标签: list prolog

我必须编写一个名为stepup(L, Z, X)的谓词,其中L是一个列表,ZX是整数。如果true可以使用列表中用户提供的合法步骤进入Z,则应返回X

例如

 stepup([7, 12, 19], 6, 32) 

应该从true返回6 + 7 + 7 + 12 = 32 起始编号应始终为Z(此处为6),规则应仅使用列表中的步骤。该规则适用于所有规模,(Z, X)始终为正。

我从这个

开始
step([V|S],A,D):- 
   sum is A+V,
   (sum=A -> write('true') 
   ; step(S,sum,D).

但不确定如何继续

1 个答案:

答案 0 :(得分:1)

也许这会有所帮助:

stepup(_,I,I).
stepup(Steps,I0,I) :-
   I0 < I,
   member(Step,Steps),
   I1 is I0 + Step,
   stepup(Steps,I1,I).

让我们使用它!

?- stepup([7,12,19],6,31).
false.

?- stepup([7,12,19],6,32).
true ;
true ;
true ;
true ;
true ;
false.

请注意,第二个查询中的冗余答案是由于使用步骤632升级到[7,12,19]的不同方式。