列表中具有特定值的元素数

时间:2016-12-08 09:18:30

标签: prolog

我试图找出在prolog中作为参数传递的列表中有多少具有值X的元素。我的代码是

cetnost(x,[],0).
cetnost(x,[X|T],C):- cetnost(X,T,C1),C is C1 + 1.


?- cetnost(a,[a,b,a,a],C).
         //false

但它仍然不假。这次递归出了什么问题?如果传递空列表,则将C设置为0,并将每个冒泡递增值递归1,以递归方式冒泡。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

cetnost(_, [], 0).
cetnost(X, [X|T], C) :- cetnost(X, T, C1), C is C1 + 1, !. 
cetnost(X, [_|T], C) :- cetnost(X, T, C), !. 

答案 1 :(得分:1)

除了使用看似拼写错误的简短x之外,你没有一个案例,你要找的元素不是列表的头部。

你需要像

这样的东西
cetnost(X, [H|T], C) :-
   dif(X, H),
   cetnost(X, T, C).