2014-02-23 47 views
1

我想將一個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). 

的 「你好」 出現在列表中的數量不展會上,而不是我收到一個警告:

singleton variable:[X] 
+0

我不想在問題中使用任何列表......我只想將一個段落作爲列表存儲在一個變量中,並且想要調用該列表來計算特定單詞出現的次數該段,但是當我這樣做「X = [你好,你好,你好]。」並編寫下面的代碼:「counthowmany(_,[],0): - !。counthowmany(X,[X | Q],N): - !,counthowmany(X,Q,N1),N是N1 + 1。 counthowmany(X,[_ | Q],N): - counthowmany(X,Q,N)。「和編譯緩衝區我有一個警告單身變量:[X],當我問在序言「counthowmany(你好,X,N)」。在列表中你好的人數沒有顯示 – Ishrak

+0

如果你想鼓勵更多的幫助,請更新你的問題(點擊'編輯')的任何細節,不要使用評論列出的代碼。這很難閱讀。 – lurker

回答

2

在一個序言文件中的行:

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

+0

它工作。 ...... – Ishrak

+0

希望我能得到一些進一步的幫助....... 「」my_list(L),counthowmany(hello,L,N)。「」現在這是我的問題,如果我想在 「」numberofhello: - my_list(L),counthowmany(hello,L,N)這樣的規則中插入這個問題。「」然後問問號碼。我該怎麼做。 – Ishrak

+0

@Ishrak你應該提出另一個StackOverflow問題,並提供你想要做的細節。但是,鑑於您在評論中寫下的內容,它看起來正確。你試過了嗎? – lurker

1

你做

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

首先你第一綁定X ANS則要求此特定X.

例2

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

X = [你好,你好,你好]。 counthowmany(_,[],0): - !。 counthowmany(X,[X | Q],N): - !,counthowmany(X,Q,N1),N是N1 + 1。counthowmany(X,[_ | Q],N): - counthowmany(X,Q,N)。 這是我在.pl文件中的代碼 現在我只想問問題counthowmany(你好,X,N)。 但這不能完成.......你能幫我嗎..... – Ishrak

+0

這是一個問題,例2只給出一個答案? – User

+0

我不想在問題中使用任何列表......我只是想將一個段落作爲一個列表存儲在一個變量中,並且想要調用該列表來計算該段落中出現特定單詞的次數但是當我這樣做時「X = [你好,你好,你好]。」並寫下面的代碼「counthowmany(_,[],0):counthowmany(X,[X | Q],N): - !,counthowmany(X,Q,N1),N是N1 + 1 counthowmany(X,[_ | Q],N): - counthowmany(X,Q,N)。「和 編譯緩衝區我有一個警告單例變量:[X],當我問在序言「counthowmany(你好,X,N)」。列表中你好的人數沒有顯示 – Ishrak