如何在prolog中传递谓词中的列表

时间:2014-02-23 16:55:04

标签: prolog

我想将一个paragram作为列表存储在变量中,然后调用该列表来计算该段落中特定单词出现的次数。

然而,当我这样做时:

L = [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).

...并编译缓冲区,然后问这个:

counthowmany(hello,L,N). 

列表中出现“hello”次数不会显示,而是收到警告:

singleton variable:[X]

2 个答案:

答案 0 :(得分:2)

prolog文件中的行:

L = [hello,hello,hello].

意味着prolog:

=(L, [hello,hello,hello]).

这意味着您正在尝试定义谓词=/2。因此,您不仅会收到有关L的单例警告(因为L未在此谓词定义中的任何其他位置使用),但您还会看到有关尝试重新定义该谓词的错误内置=/2,因为prolog已经定义了它。

你能做的是:

my_list([hello,hello,hello]).

然后,你可以这样做:

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

请注意,此案例有效:

L = [hello,hello,hello], counthowmany(hello,L,N).

它有效,因为它没有尝试重新定义 =/2。它只是使用现有的内置谓词=/2

答案 1 :(得分:1)

你做

?- X = [hello,how,are,you,hello,hello], counthowmany(hello, X, N).
X = [hello, how, are, you, hello, hello],
N = 3.

首先你首先绑定X,然后你要求这个特定的X.

示例2。

?- counthowmany(hello, X, N).
X = [],
N = 0.