我想将一个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]
答案 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.