Prolog - 如何计算列表中满足特定条件的元素数量?

xsx*_*xsx 5 list prolog

例如,如果我有一个列表[1,1,2,3,5,1],我想计算这个列表中 1 的数量,我该怎么做?

我写了类似的东西:

count([], 0).
count([H|T], N) :-
   count(T, X),
   (  H =:= 1
   -> N is X+1
   ;  N is X
   ),
   N > 0.
Run Code Online (Sandbox Code Playgroud)

在这个递归中,我想做如果 Head 等于 1,则计数 + 1,如果 Head 不为 1,则计数保持不变。但是,如果列表中的内容不是 1,它会返回 false。我知道问题在于,只要元素不满足 if 语句,它就会失败;它永远无法到达 else 语句。我该如何解决?请帮忙!!!!

Eni*_*ity 4

尝试这个:

count([],0).
count([1|T],N) :- count(T,N1), N is N1 + 1.
count([X|T],N) :- X \= 1, count(T,N).
Run Code Online (Sandbox Code Playgroud)