我必须编写一个名为stepup(L, Z, X)
的谓词,其中L
是一个列表,Z
和X
是整数。如果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).
但不确定如何继续
答案 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.
请注意,第二个查询中的冗余答案是由于使用步骤6
从32
升级到[7,12,19]
的不同方式。