在询问序言时,我怎么称呼prolog规则

时间:2014-02-25 01:54:33

标签: prolog

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.

它只是给了我“真实”,我没有得到你好的号码。

1 个答案:

答案 0 :(得分:0)

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

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

有了这个,

?- numberofhello(N).

你应该得到你的N = 3