繁体   English   中英

列表中的 Prolog-Sum 正数

[英]Prolog-Sum positive numbers from a List

我有以下 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).

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

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

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

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

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).

作为对谓词的初始版本的改进,您能否重写它以使用累加器使其尾递归

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM