Prolog:在列表中计算正数

时间:2015-12-22 19:57:51

标签: list prolog clpfd visual-prolog

我想计算列表中的积极元素(VIsual Prolog)。所以我写了这个函数:

positiveCount([], C).
positiveCount([A], C) :- A > 0, C = C + 1.
positiveCount([H|T], C) :- H > 0,!,C = C+1,positiveCount(T,C); positiveCount(T,C).

错误:

The flow pattern '(o,i)' does not exist for '+' main.pro

我从这个错误中了解到,我不能将C=C+1用作C作为输入变量。

任何想法如何修复我的代码?

1 个答案:

答案 0 :(得分:3)

以下代码使用上的,因此请勿在上运行 as - (

:- use_module(library(clpfd)).

count_pos([], 0).
count_pos([E|Es], C) :- E #=< 0,            count_pos(Es, C).
count_pos([E|Es], C) :- E #>  0, C #= C0+1, count_pos(Es, C0).

让我们以简单的英语方向阅读&#34;箭头&#34; :-,即&#34;从右到左&#34;。

  1. count_pos([], 0).

      

    空列表[]中包含的正算术表达式的数量为零。

  2. count_pos([E|Es], C) :- E #=< 0, count_pos(Es, C).

      

    如果列表Es包含C正算术表达式,如果某些算术表达式E不是正数
    然后得出结论:[E|Es]还包含C个正算术表达式。

  3. count_pos([E|Es], C) :- E #> 0, C #= C0+1, count_pos(Es, C0).

      

    如果列表Es包含C0正算术表达式,如果某些算术表达式E 正面然后得出结论[E|Es]还包含C0+1正算术表达式。

  4. 示例查询:

    ?- count_pos([1,2,3,0,-1,-2], C).
       C = 3
    ;  false.