[英]Prolog: Count positive elems in list
我想計算清單中的積極因素(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
作為輸入變量。
任何想法如何修復我的代碼?
以下代碼在swi-prolog上使用clpfd ,所以不要指望它在visual-prolog上按原樣運行:-(
不過,我希望它對你有用!
:- 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).
讓我們讀簡單的英語條款中的“箭頭”的方向:-
這是“左,右”。
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.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.