3

我想计算列表中的正元素(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+1C 用作输入变量。

有什么想法可以修复我的代码吗?

4

1 回答 1

3

以下代码在,所以不要指望它在按原样运行:-(不过,我希望它对你有用!

:- use_module ( library(clpfd) )。

计数位置([],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)。

让我们按照“箭头”的方向:-即“从右到左”,用通俗的英语阅读这些从句。

  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正算术表达式。

示例查询:

?- count_pos([1,2,3,0,-1,-2], C).
   C = 3
;  false.
于 2015-12-22T21:37:11.690 回答