如何计算列表中出现WORD的次数?

时间:2009-12-11 19:14:54

标签: prolog

如何计算列表中出现WORD的次数?

例如: counthowmany(hello,[hello,how,are,you,hello,hello],N)

N给出了hello字的总数。

由于

4 个答案:

答案 0 :(得分:2)

这是一个解决方案:

counthowmany(_, [], 0) :- !.
counthowmany(X, [X|Q], N) :- !, counthowmany(X, Q, N1), N is N1+1.
counthowmany(X, [_|Q], N) :- counthowmany(X, Q, N).

第一行是终止测试:在空列表中,计数为零。另外两行是递归调用,如果第一个元素匹配(第2行),则递增计数。

这是Darius建议的类似但纯逻辑的版本(没有剪切):

counthowmany(_, [], 0).
counthowmany(X, [X|Q], N) :- counthowmany(X, Q, N1), N is N1+1.
counthowmany(X, [Y|Q], N) :- X \== Y, counthowmany(X, Q, N).

答案 1 :(得分:1)

tcount/3与明确的术语等式(=)/3结合使用,如下所示:

?- tcount(=(hello),[hello,how,are,you,hello,hello],N).
N = 3.                          % succeeds deterministically

答案 2 :(得分:-1)

这是另一种实现方式。这是使用累加器的Tail递归。

countwords(X,L,N) :- countwords(X,L,0,N),!.
countwords(X,[],N,N).
countwords(X,[X|T],P,N) :- P1 is P+1 , countwords(X,T,P1,N).
countwords(X,[H|T],P,N) :- X\==H , countwords(X,T,P,N).

答案 3 :(得分:-1)

更好的aswer

countWord([],0).
countWord([_|List], A):- countWord(List,B), A is B+1.