【问题标题】:how can i call prolog rule while asking prolog问序言时如何调用序言规则
【发布时间】:2014-02-25 23:36:10
【问题描述】:
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.

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

【问题讨论】:

标签: prolog


【解决方案1】:

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

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

有了这个,

?- numberofhello(N).

你应该得到你的N = 3

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2022-10-15
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多