首页 > 解决方案 > 列表中的 Prolog-Sum 正数

问题描述

我有以下 Prolog 事实来总结列表中的正数,但它不起作用。我究竟做错了什么?

somarPositivos([],0).
somarPositivos([H|T],Soma):-H>0,somarPositivos(T,Soma1),Soma is Soma1+H.
somarPositivos([H|T],Soma):-H=<0 ,somarPositivos(T,Soma1).

标签: listsumprolog

解决方案


您在第三个子句中有错字。它应该是:

somarPositivos([H|T],Soma):-H=<0 ,somarPositivos(T,Soma).

大多数 Prolog 编译器会在该子句中打印出变量SomaSoma1单例变量的警告。

关于遵循 Prolog 编码指南的编程风格的一些注释。缩进你的代码。在运算符周围使用空格。使用下划线而不是 camelCase 作为谓词名称以提高可读性。因此,最好写:

somar_positivos([],0).
somar_positivos([H|T],Soma) :-
    H > 0,
    somar_positivos(T,Soma1),
    Soma is Soma1+H.
somar_positivos([H|T],Soma) :-
    H =< 0,
    somar_positivos(T,Soma).

作为对这个谓词初始版本的改进,你可以重写它以使用累加器使其尾递归吗?


推荐阅读