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,则在上面的代码中
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 :(得分:0)
您的问题是您的查询(numberofhello.
)没有变量(即“wh-word”)这样的事实,因此成为“你能算出多少hellos?”是 - 没有问题,而不是“多少hellos”。这应该解决它:
numberofhello(N) :- my_list(L), counthowmany(hello, L, N).
有了这个,
?- numberofhello(N).
你应该得到你的N = 3
。