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

标签 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.

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

最佳答案

尝试这个:

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

关于list - Prolog - 如何计算列表中满足特定条件的元素数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46902653/

相关文章:

prolog - 使用 clpfd 进行过桥拼图

Python:从列表中获取所有不重叠的连续子列表

c++ - 在 dll 中嵌入 SWI-Prolog

prolog - 从序言中的两个列表中删除连续序列

jQuery 使用简单的选择框过滤列表

list - 理解 Prolog 列表和递归

Prolog 整数比较因 error_type 错误而失败

python - 在Python中将列表动态分解为变量

python - 在另一个列表的嵌套列表中比较/查找列表

java - 误解了java中的泛型