2014-02-25 37 views
0
my_list([hello,hello,hello]) 

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

在上面的代码,如果编译缓冲区之后问的Prolog我怎么能叫Prolog的规则,同时要求序言

my_list(L),counthowmany(hello,L,N). 

这个问题,那么它给我的问候数量.....

现在如果我修改以下方式

my_list([hello,hello,hello]) 

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

numberofhello :- my_list(L), counthowmany(hello,L,N). 

% i. e. I want to insert the question in a rule 

和编译缓冲后的代码(虽然我得到一个单变量警告)如果我问的Prolog

numberofhello. 

它只是给我“真”,我不明白你好的数量。

+0

[如何在prolog中的谓词中传递列表]的可能重复(http://stackoverflow.com/questions/21971270/how-to-pass-a-list-in-a-predicate-in-prolog ) – false

回答

0

您的问题是您的查询(numberofhello.)没有变量(即“wh-word”),因此变成“您能计算多少个hellos?”是 - 不是问题而是“多少个问题”。这应该可以解决它:

numberofhello(N) :- my_list(L), counthowmany(hello, L, N). 

有了这个,

?- numberofhello(N). 

你应该让你的N = 3

+0

它的工作........ – Ishrak