在列表中添加小于给定数字的数字

时间:2018-04-24 20:15:37

标签: list prolog addition

我正在学习prolog,我必须创建一个程序,该程序返回小于给定数字的数字(在列表中)的添加。 我有这个..

minvalue

我希望例如:

numlowest

但它给了我错误。

我正在使用此https://swish.swi-prolog.org

我该怎么做才能解决这个问题?我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

问题来自以下事实:对于值V,您只处理案例X<VX>V而不处理案例X=V。事实上,如果您将X>K替换为X>=K,您的程序将会得到结果R=8

让我说说你的计划的两件事:

首先,您不需要代码中的最后两行(即additionsmaller([X],K,X):-X<K.additionsmaller([X],K,0):-K<X.)。只需用additionsmaller([],_,0).

替换这两行

第二:您还应该考虑编写一个尾递归解决方案,如下所示:

additionSmallerTail([],_,V,V).
additionSmallerTail([H|T],K,V,V0):-
    H >= K,
    additionSmallerTail(T,K,V,V0).
additionSmallerTail([H|T],K,V,V0):-
    H < K,
    V1 is V+H, 
    additionSmallerTail(T,K,V1,V0).

?- additionSmallerTail([1,2,3,4,2],4,0,R).
R = 8
false

为什么要使用尾递归? This link很有意思。