在prolog中添加不同规则的输出

时间:2014-03-04 17:39:51

标签: prolog

my_list([this,is,a,dog,.,what,is,your,name,?,i,simply,adore,you,!]).

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


number_of_sentence(N) :- my_list(L),count(.,L,N).
number_of_sentence(N) :- my_list(L),count(?,L,N).
number_of_sentence(N) :- my_list(L),count(!,L,N).

在上面的代码中,列表中有三种类型的句子(my_list)1肯定,1问题和1感叹,当我这样做时

?- number_of_sentence(N).
N = 1 ;
N = 1 ;
N = 1.

现在如何在N中添加值并显示“total = 3” 请任何人帮助我......

1 个答案:

答案 0 :(得分:1)

如果您的Prolog有库(aggregate),您可以

?- aggregate(sum(C), (my_list(L), (count(.,L,C);count(?,L,C);count(!,L,C))), N).

但是mbratch的建议似乎更好。另一种方法,没有count / 3:

?- aggregate(count, E^(my_list(L), member(E, L), memberchk(E, [.,?,!])), N).
L = [this, is, a, dog, '.', what, is, your, name|...],
N = 3.