我想计算列表中的积极元素(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作为输入变量。
任何想法如何修复我的代码?
答案 0 :(得分:3)
以下代码使用clpfd上的swi-prolog,因此请勿在visual-prolog上运行 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;。
count_pos([], 0).
[]
中包含的正算术表达式的数量为零。count_pos([E|Es], C) :- E #=< 0, count_pos(Es, C).
Es
包含C
正算术表达式,如果某些算术表达式E
不是正数
然后得出结论:[E|Es]
还包含C
个正算术表达式。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.