如何将prolog中的所有正数相加

COM*_*COM 1 prolog

我正在使用 swi-prolog 来获取给定列表中所有正整数的总和

到目前为止,这是我的代码,请帮助我解决哪里出错了

sumPos([] ,0).
sumPos([Head | Tail], X) :- Head > 0,
    sumPos(Tail, N), 
    X is N+Head.
Run Code Online (Sandbox Code Playgroud)

为了测试我正在使用

sumPos([1,-2,3,-5], X).
Run Code Online (Sandbox Code Playgroud)

答案应该是 X=4 但我得到了错误

小智 5

当 Head 为负数时,您需要另一个可用的子句:

sumPos([Head | Tail], X) :- Head =< 0, sumPos(Tail, X).
Run Code Online (Sandbox Code Playgroud)